歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 文本中的不可見字符和處理

Linux 文本中的不可見字符和處理

日期:2017/2/28 14:30:41   编辑: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

Copyright © Linux教程網 All Rights Reserved