2017-02-20 134 views
0

我正在嘗試重定向isql(Sybase)的輸出,該文件返回行末^@處的奇怪字符。我需要刪除完整文件的這個字符。我不能在查詢中使用輸出重定向,因爲我沒有實現這個功能。如何從文件中刪除「^ @」字符?

例如:

Node:SNMP_ALU_FTTH:INACT:Rack_1_SubRack_1_Slot_5_PON_4_ONT_34^@;Network Fail^@;1487336303; 

這隻有當我重定向到一個文件發生了:

./script.pl > result.txt 

系統信息:

的Linux XXXXXXX 2.6.18-194.el5#1 SMP星期二Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

我試過在文件上做一個「dos2unix」,但是n沒有改變

+1

什麼是「BBDD」? –

+2

'^ @'是顯示空字符的常用方法。 –

+0

你是如何查看文件的? –

回答

2

正如在評論中提到的,這個符號是空字符的表示,它實際上是一個非打印字符。

如果你回顯一個null分隔的字符串,或者如果你捕獲一個null分隔的文件,你什麼也看不到。

要回答你的問題,你可以使用tr實用工具刪除空字符。

例如使用tr '\0' '\n' <file(或<<<"$var")會將空字符轉譯爲新行。
同樣tr '\0' ' '會將空字符轉換爲空格等。

或者您可以使用tr -d '\0'刪除空字符。

備註:
在開始使用字符串中存在的空字符之前,請確保您知道您在做什麼......請注意,許多程序都能夠處理空字符作爲輸入字段分隔符而其他一些程序實際上可能需要將數據分離爲空。你的程序生成這個空分隔字符串也許可以調整,以提供基於不同分離器的數據。閱讀手冊。

注2:
只是爲了記錄在案,空字符也可以用sed的刪除:sed 's/\x00/ /g' file
這也將轉換成空字符(十六進制碼00 = \ X00)空間。
Sed可以與-i開關組合以便在原地應用更改。

+0

你解決了我的問題!真的謝謝你的解釋:) –

0

我不知道你在做什麼腳本。但在以下命令的幫助下,您可以從文件中刪除「^ @」。

sed -i -e "s/\^\@//g" result.txt 
+2

該文件不太可能包含文字「^ @」序列。 –

+0

確切地說,這個命令不起作用,因爲它不是一個文字字符,它是一個特殊的分隔符(空字符) –