Удалить символы юникода из текстовых файлов - sed, другие методы bash / shell - PullRequest
40 голосов
/ 19 декабря 2011

Как удалить символы юникода из набора текстовых файлов на терминале?Я пробовал это, но это не сработало:

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

Мне нужно удалить эти юникоды из текстовых файлов

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 ]

56 голосов
/ 19 декабря 2011

очистить все не-ascii символы file.txt

$ iconv -c -f utf-8 -t ascii file.txt
$ strings file.txt
42 голосов
/ 19 декабря 2011

Если вы хотите удалить ТОЛЬКО определенные символы и у вас есть Python, вы можете:

CHARS=$(python -c 'print u"\u0091\u0092\u00a0\u200E".encode("utf8")')
sed 's/['"$CHARS"']//g' < /tmp/utf8_input.txt > /tmp/ascii_output.txt
24 голосов
/ 19 декабря 2011

Для кодировки utf-8 unicode вы можете использовать это регулярное выражение для sed:

sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//'
12 голосов
/ 19 декабря 2011

Использовать iconv:

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

Это переведет символы типа «Š» в «S» (наиболее похожие на них).

2 голосов
/ 12 июля 2014

Конвертируйте файлы Swift из utf-8 в ascii:

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

быстрое автоматическое завершение не работает в Xcode6-Beta

...