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@bkjia 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@bkjia 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@bkjia script]# cat /tmp/test.txt

test                    I am testing

more testing[root@bkjia script]#

如果用cat -A查看

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

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

more testing[root@bkjia script]#

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

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

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

Linux文本处理工具grep命令详解

Linux的grep命令

Linux中grep命令的12个实践例子

Linux基础命令之grep详解

Linux中强大且常用命令:find、grep

浅谈Linux 的grep命令与正则表达式

本文永久更新链接地址:

相关内容