2011-12-20 59 views
3

任何想法如何從一堆文本文件中擺脫這個惱人的字符U + 0092?我已經嘗試了以下所有內容,但不起作用。這就是所謂的U + 0092 + 控制從字符映射表如何擺脫這個unicode字符?

sed -i 's/\xc2\x92//' * 
sed -i 's/\u0092//' * 
sed -i 's///' * 

啊,我已經找到一種方法:

CHARS=$(python2 -c 'print u"\u0092".encode("utf8")') 
sed 's/['"$CHARS"']//g' 

但有一個直接的SED方法呢?

+1

單引號將停止您的shell解析任何反向符號的註釋。我不確定sed會自己做這個,所以也許嘗試雙引號? – 2011-12-20 06:43:21

+0

這個傢伙很棘手。這是某種非空間中斷,它是出現在txt但不可見的U + 0092。 – alvas 2011-12-20 07:13:18

+2

U + 0092是一個從未使用過的控制字符。它幾乎總是在Windows代碼頁1252文件中將單個右引號'''錯誤解碼爲ISO-8859-1的結果。編碼非常相似,但字節範圍0x80-0x9F中編碼的字符不同。在這種情況下,您不應該刪除它或其他智能引號字符,您應該正確讀取它們作爲ISO-8859-1,或將文件從1252轉碼爲8859-1或UTF-8。 – bobince 2011-12-21 21:06:23

回答

3

嘗試sed "s/\`//g" *。 (我添加了g,所以它會刪除它找到的所有反引號)。


編輯:這不是OP要刪除的倒勾。

this question的解決方案,這應該工作:

sed 's/\xc2\x92//g' 

爲了證明它的作用:

[[email protected] ~]$CHARS=$(python -c 'print u"asdf\u0092asdf".encode("utf8")') 
[[email protected] ~]$echo $CHARS 
asdf<funny glyph symbol>asdf 
[[email protected] ~]$echo $CHARS | sed 's/\xc2\x92//g' 
asdfasdf 

看到,因爲它是你已經嘗試過的東西,也許是什麼在你的文本文件不是U + 0092?

+0

哦,這不是一個反效果。 – alvas 2011-12-20 07:12:10

+0

啊,我明白了。在這種情況下,看看這個解決方案:http://stackoverflow.com/questions/8562354/remove-unicode-characters-from-textfiles-sed-other-bash-shell-methods/8562661#8562661 – 2011-12-20 07:25:22

+0

這是一個奇怪的事情。 'sed's/\ xc2 \ x92 // g''不起作用,但是'CHARS = $(python -c'print u「\ u0092」.encode(「utf8」)') sed's/[' 「$ CHARS」'] // g''可以正常工作。既然U92和X92應該是同一個字符,我不確定爲什麼一個人可以工作,但是另一個工作。 – alvas 2011-12-20 07:44:51

1

這可能會爲你工作(GNU SED):

echo "string containing funny character(s)" | sed -n 'l0' 

這將顯示字符串作爲sed的看到它在八進制,然後使用:

echo "string containing funny character(s)" | sed 's/\onnn//g' 

哪裏nnn八進制值,刪除它/他們。