2016-10-13 4 views

ответ

1

вы можете использовать tr держать только печатаемые символы:

tr -cd "[:print:]" <test.txt > test2.txt 

Использует tr опцию удаления на непечатаемых (критерии печати отрицается -c опция)

Если вы хотите заменить эти специальные символы чем-то другим (например: X):

tr -c "[:print:]" "X" <test.txt > test2.txt 

С sed, вы можете попробовать, что заменить непечатаемые на X:

sed -r 's/[^[:print:]]/X/g' text.txt > test2.txt 

он работает на некоторых, но не на гольцов> 127 (может быть, потому, что я попробовал это версия для печати, как ▒!) на моей машине, в то время как tr работает отлично.

примеры инлайн (Printf генерировать специальные символы + фильтр + од, чтобы показать байт):

$ printf "\x01ABC\x05\xff\xe0" | od -c 
0000000 001 A B C 005 377 340 
0000007 

$ printf "\x01ABC\x05\xff\xe0" | sed "s/[^[:print:]]//g" | od -c 
0000000 A B C 377 340 
0000005 

$ printf "\x01ABC\x05\xff\xe0" | tr -cd "[:print:]" | od -c 
0000000 A B C 
0000003 
Смежные вопросы