我的源数据包含非可读格式的特殊字符。任何人都可以提供以下帮助:
尝试的命令: sed&#39 / s /../ t / g' test.txt>的test2.txt
答案 0 :(得分: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
它可以解决一些问题,但是在我的机器上运行&gt; 127(可能是因为我试过的那个可打印为▒!)而tr
完美无缺。
内联示例(printf生成特殊字符+ filter + od显示字节):
$ 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