感谢支持
我们一直在努力

Linux 文本中的不可见字符和处理

同事提供了一个接口,我通过curl调用,然后将返回结果写入到文件,然后用grep和sed处理这个文件。用浏览器和curl打开的时候,都是正常的,返回的都是

inetis_p1,masterpool;inetis_p2,masterpool;inetis_q1,masterpool;inetis_q2,masterpool;inetis_t1,masterpool;inetis_t2,masterpool;

但写入文件之后,用grep和sed处理的时候,总是说这是一个二进制文件

[root@linuxidc script]# grep master /var/tmp/qiehuan145.txt

匹配到二进制文件 /var/tmp/qiehuan145.txt

很奇怪,用vim打开之后,发现是这样的

inetis_p1,masterpool^@^@^@^@^@^@;inetis_p2,masterpool^@^@^@^@^@^@;inetis_q1,masterpool^@^@^@^@^@^@;inetis_q2,masterpool^@^@^@^@^@^@;inetis_t1,masterpool^@^@^@^@^@^@;inetis_t2,masterpool^@^@^@^@^@^@;

里面多了很多的不可见的字符^@

用cat -A也能看到

[root@linuxidc script]# cat -A /var/tmp/qiehuan145.txt

inetis_p1,masterpool^@^@^@^@^@^@;inetis_p2,masterpool^@^@^@^@^@^@;inetis_q1,masterpool^@^@^@^@^@^@;inetis_q2,masterpool^@^@^@^@^@^@;inetis_t1,masterpool^@^@^@^@^@^@;inetis_t2,masterpool^@^@^@^@^@^@;$

像这种不可见字符,用printf可以输出到文件中,比如:

printf ‘test\011\011\011I am testing\014\010\012more testing’ > /tmp/test.txt

如果用cat查看

[root@linuxidc script]# cat /tmp/test.txt

test                    I am testing

more testing[root@linuxidc script]#

如果用cat -A查看

[root@linuxidc script]# cat -A /tmp/test.txt

test^I^I^II am testing^L^H$

more testing[root@linuxidc script]#

现在说一下我是怎么解决的

cat -A /var/tmp/qiehuan145.txt  |sed ‘s/[\^@]//g’

先用cat -A读取,然后用sed替换,不过需要注意到是^需要转义

Linux文本处理工具grep命令详解 http://www.linuxidc.com/Linux/2014-02/97194.htm

Linux的grep命令 http://www.linuxidc.com/Linux/2014-02/96927.htm

Linux中grep命令的12个实践例子 http://www.linuxidc.com/Linux/2013-11/92669.htm

Linux基础命令之grep详解 http://www.linuxidc.com/Linux/2013-07/87919.htm

Linux中强大且常用命令:find、grep http://www.linuxidc.com/Linux/2013-07/87816.htm

浅谈Linux 的grep命令与正则表达式 http://www.linuxidc.com/Linux/2013-07/87384.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-06/103370.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux 文本中的不可见字符和处理
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏