同事提供了一個接口,我通過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