Я хочу удалить все не-ASCII символы из файла на месте.
Я нашел одно решение с помощью tr, но, думаю, мне нужно записать этот файл после модификации.
Мне нужно сделать это на месте с относительно хорошей производительностью.
Есть предложения?
Perl oneliner будет делать: perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>
perl -i.bak -pe 's/[^[:ascii:]]//g' <your file>
-i говорит, что файл будет редактироваться на месте, а резервная копия будет сохранена с расширением .bak.
-i
.bak
# -i (inplace) sed -i 's/[\d128-\d255]//g' FILENAME
Я перепробовал все решения и ничего не получалось.Следующее, однако:файл, поэтому измените по мере необходимости.
sed -i 's/[^[:print:]]//' FILENAME
Кроме того, это действует как dos2unix
Попробуйте tr вместо sed
tr
tr -cd '[:print:]' < file.txt
Это сработало для меня:
sed -i 's/[^[:print:]]//g'
Я использую очень минимальную систему busybox, в которой нет поддержки диапазонов в tr или классах символов POSIX, поэтому я должен сделать это дрянным старомодным способом.Вот решение с sed, убирающее из файла ВСЕ непечатаемые символы не ASCII:
sed
sed -i 's/[^a-zA-Z 0-9`~!@#$%^&*()_+\[\]\\{}|;'\'':",.\/<>?]//g' FILE
В качестве альтернативы sed или perl вы можете использовать классы символов ed (1) и POSIX.
Примечание: ed (1) считывает весь файл в память, чтобы редактировать его на месте, поэтомудля действительно больших файлов вы должны использовать sed -i ..., perl -i ...
# see: # - http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed # - http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes # test echo $'aaa \177 bbb \200 \214 ccc \254 ddd\r\n' > testfile ed -s testfile <<< $',l' ed -s testfile <<< $'H\ng/[^[:graph:][:space:][:cntrl:]]/s///g\nwq' ed -s testfile <<< $',l'
awk '{ sub("[^a-zA-Z0-9\"!@#$%^&*|_\[](){}", ""); print }' MYinputfile.txt > pipe_out_to_CONVERTED_FILE.txt
# -i (inplace) LANG=C sed -i 's/[\d128-\d255]//g' FILENAME
Роль детали LANG=C состоит в том, чтобы избежать ошибки Invalid collation character.
LANG=C
Invalid collation character
На основании ответа Ивана и комментария Патрика.