如何摆脱这个unicode角色?

时间:2011-12-20 06:39:31

标签: unicode sed text-files non-printing-characters

任何想法如何从一堆文本文件中摆脱这个恼人的角色U + 0092?我已经尝试了以下所有,但它不起作用。它从字符映射中被称为 U + 0092 + control

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方法吗?

2 个答案:

答案 0 :(得分:3)

试试sed "s/\`//g" *。 (我添加了g所以它会删除它找到的所有反引号。


编辑:这不是OP希望删除的反击。

按照this question中的解决方案,这应该有效:

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

为了证明它:

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

看到你已经尝试过的东西,或许文字文件中的内容不是U + 0092?

答案 1 :(得分:1)

这可能适合你(GNU sed):

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

这将显示sed在八进制中看到的字符串,然后使用:

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

nnn是八进制值,删除/它们。