从文本文件中删除unicode字符 - sed,其他bash / shell方法

时间:2011-12-19 13:55:39

标签: bash unicode sed text-files spaces

如何从终端上的一堆文本文件中删除unicode字符? 我试过这个,但它不起作用:

sed 'g/\u'U+200E'//' -i *.txt

我需要从textfiles中删除这些unicodes

U+0091 - sort of weird "control" space
U+0092 - same sort of weird "control" space
A0 - non-space break
U+200E - left to right mark

5 个答案:

答案 0 :(得分:56)

清除file.txt

的所有非ascii字符
$ iconv -c -f utf-8 -t ascii file.txt
$ strings file.txt

答案 1 :(得分:41)

如果你想删除特定字符并且你有python,你可以:

CHARS=$(python -c 'print u"\u0091\u0092\u00a0\u200E".encode("utf8")')
sed 's/['"$CHARS"']//g' < /tmp/utf8_input.txt > /tmp/ascii_output.txt

答案 2 :(得分:24)

对于unicode的utf-8编码,您可以将此正则表达式用于sed:

sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//'

答案 3 :(得分:12)

使用iconv:

iconv -f utf8 -t ascii//TRANSLIT < /tmp/utf8_input.txt > /tmp/ascii_output.txt

这会将“Š”等字符翻译成“S”(最相似的字样)。

答案 4 :(得分:2)

将Swift文件从utf-8转换为ascii:

for file in *.swift; do
    iconv -f utf-8 -t ascii "$file" > "$file".tmp
    mv -f "$file".tmp "$file"
done

swift auto completion not working in Xcode6-Beta