本文虽然针对的是特殊字符“^@”,但对于其他不可见的特殊字符依然适用。核心思想就是利用cat -v将不可见字符转变为可见字符,而可见字符是可以利用各种命令处理的。
-
今天处理一个文件的时候发现文件中字符间夹杂着特殊字符“^@”,这些特殊字符常态下是看不见的,但是可能会引发程序运行问题。此文件是从windows SQL Server中导出的数据,并传到Linux上来进行处理了。可以使用cat -v查看不可打印字符:
#看似正常 [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG !@#qweasd412 19960718.+0. 513321262@qq.com qqq3356273 13260362351 wucheng25 ZHAOGANG55555 zl13994178341 ytmfnia qaz911018 #查看不可打印字符 [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v ^@!^@@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@ ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@ ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@@^@q^@q^@.^@c^@o^@m^@ ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@ ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@ ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@ ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@ ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@ ^@y^@t^@m^@f^@n^@i^@a^@ ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@
-
查看文件类型
可以发现文件类型是data,根据man手册,data是file命令不能识别的文件类型[root@localhost]/home/NEW_HW1# file OLD.ZIP-SHEGONG OLD.ZIP-SHEGONG: data
dos2unix 命令无效
-
去除特殊字符^@
特殊字符^@并不是两个字符,而是一个字符,一个使用“ctrl+V ctrl+@”才能打出来的字符。
网上提供了几种办法,但是没有解决问题:# 方法1 [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | tr -d '^@' | cat -v ^@!^@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@ ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@ ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@^@q^@q^@.^@c^@o^@m^@ ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@ ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@ ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@ ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@ ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@ ^@y^@t^@m^@f^@n^@i^@a^@ ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@ # 方法2 [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | sed 's/\^@//g' | cat -v ^@!^@@^@#^@q^@w^@e^@a^@s^@d^@4^@1^@2^@ ^@1^@9^@9^@6^@0^@7^@1^@8^@.^@+^@0^@.^@ ^@5^@1^@3^@3^@2^@1^@2^@6^@2^@@^@q^@q^@.^@c^@o^@m^@ ^@q^@q^@q^@3^@3^@5^@6^@2^@7^@3^@ ^@1^@3^@2^@6^@0^@3^@6^@2^@3^@5^@1^@ ^@w^@u^@c^@h^@e^@n^@g^@2^@5^@ ^@Z^@H^@A^@O^@G^@A^@N^@G^@5^@5^@5^@5^@5^@ ^@z^@l^@1^@3^@9^@9^@4^@1^@7^@8^@3^@4^@1^@ ^@y^@t^@m^@f^@n^@i^@a^@ ^@q^@a^@z^@9^@1^@1^@0^@1^@8^@
-
试了网上的方法,没有成功,思考片刻,灵机一动,解决了问题:
# 先使用cat -v将不可见字符转为可见字符再转换不就可以了吗 # 注意,因为转变为了可见字符,所以^@成为了两个字符^和@ [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v | tr -d '^@' | cat -v !#qweasd412 19960718.+0. 513321262qq.com qqq3356273 13260362351 wucheng25 ZHAOGANG55555 zl13994178341 ytmfnia qaz911018 # or [root@localhost]/home/NEW_HW1# head OLD.ZIP-SHEGONG | cat -v | sed 's/\^@//g' | cat -v !@#qweasd412 19960718.+0. 513321262@qq.com qqq3356273 13260362351 wucheng25 ZHAOGANG55555 zl13994178341 ytmfnia qaz911018
-
进行真正的转换
[root@localhost]/home/NEW_HW1# cat -v OLD.ZIP-SHEGONG | tr -d '^@' > t # Everything is OK [root@localhost]/home/NEW_HW1# du -mh t 1.1G t [root@localhost]/home/NEW_HW1# du -mh OLD.ZIP-SHEGONG 2.2G OLD.ZIP-SHEGONG # 文件类型也被file命令识别了 [root@localhost]/home/NEW_HW1# file t t: ASCII text [root@localhost]/home/NEW_HW1# head -2 t | cat -v !#qweasd412 19960718.+0.
利用cat -v去除文件中的不可见特殊字符
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 近两天在CentOS7上安装了oracle,在网上找了一些资料,发现不是很全面,为了方便以后再次安装,所以...
- 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1BLOG文档结构图 ...