Я хочу удалить все символы неASCII из файла на месте.
Я нашел одно решение с TR, но я предполагаю, что должен записать тот файл обратно после модификации.
Я должен сделать это на месте с относительно хорошей производительностью.
Какие-либо предложения?
Для этого подойдет perl oneliner: perl -i.bak -pe 's/[^[:ascii:]]//g' <ваш файл>
-i
говорит, что файл будет отредактирован на месте, а резервная копия будет сохранена с расширением .bak
.
В качестве альтернативы 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'