如何在Unix命令中替换特殊字符

时间:2016-10-13 10:19:30

标签: sed

我的源数据包含非可读格式的特殊字符。任何人都可以提供以下帮助:

Source data:

ascii values

尝试的命令: sed&#39 / s /../ t / g' test.txt>的test2.txt

1 个答案:

答案 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