2013-08-16 127 views
7

我想從文件中刪除單引號和雙引號。我可以在單個sed命令中執行嗎?sed同時刪除單引號和雙引號

我想:

sed 's/\"//g;s/\'//g' txt file 

,但得到這個錯誤

'」'是無與倫比的。

請大家幫忙。

回答

5

試試這個來代替:

sed -e 's|["'\'']||g' txt 
+0

@ user2689092注意Imane的解決方案使用一種技術,用仲裁字符替換sed表達式封裝。假設原始輸入中沒有「%」,您可以使用sed -e的%aaa%bbb%g'來替換bbb中的aaa。 –

0

嗯,這裏就是我來。首先,我用ord()發現了單引號和雙引號字符的代碼,然後使用$(..)語法將它傳遞給未引用的sed表達式。我用XX和YY代替空字符串。顯然,它從最佳狀態開始是一種常態,也就是說,它們也許應該合併成一種表達方式,我鼓勵你對它進行試驗。 有幾種技術可以避免引用問題,您還可以將sed表達式放入單獨的文件中,以避免它被shell解釋。當試圖處理輸出中的單個不可讀字符時,ord()/ chr()技巧也很有用,例如非UTF控制檯上的UTF字符串。

dtpwmbp:~ pwadas$ echo '"' | perl -pe 'print ord($_) . "\n";' 
34 
" 
dtpwmbp:~ pwadas$ echo "'" | perl -pe 'print ord($_) . "\n";' 
39 
' 
dtpwmbp:~ pwadas$ echo \'\" 
'" 
dtpwmbp:~ pwadas$ echo \'\" | sed -e s/$(perl -e 'print chr(34) . "\n"')/XX/g | sed -e s/$(perl -e 'print chr(39) . "\n"')/yy/g 
yyXX 
dtpwmbp:~ pwadas$ 

EDIT(注意,這時候,兩個角色都具有相同字符串「YY」代替)。可能有一些shell實用程序的「翻譯」字符的字符代碼,方向相反,即它應該是可能的不使用Perl或其他語言解釋器就可以做到這一點。

dtpwmbp:~ pwadas$ echo \'\" | sed -e s/[`perl -e 'print chr(34) . chr(39)'`]/yy/g 
yyyy 
dtpwmbp:~ pwadas$ 

和這裏的但在外殼的另一種方式,也許更簡單

dtpwmbp:~ pwadas$ X="'"; Y='"' ; echo $X$Y; echo $X$Y | sed -e "s/$X/aa/g;s/$Y/bb/g" 
'" 
aabb 
dtpwmbp:~ pwadas$ 
3

你無法逃避的殼一對燒毛引號內一個單引號。轉義雙引號是允許的。下面的sed命令應該工作:

sed "s/['\"]//g" file 
+1

這是正確的答案,有時候你必須有單引號的文本,那麼單引號的方式就是「'''''。 「'它'好極了!'」。 – jthill

12

另一種可能性是使用tr

tr -d \'\" file 
2

您可以使用下面

sed "s/'/ /g" file.txt > newfile.txt 
sed 's/\"//g' newfile.txt > Required_file.txt 

Required_file.txt命令是最終輸出。