使用sed删除特殊字符并添加空格

时间:2014-02-18 00:04:48

标签: sed

我想要改变一段文字:

^@^A^@jfits^@^A^@pin^@^A^@sadface^@^A^@secret^@^A^@test^@^A^@tools^@^A^@ttttfft^@^A^@tty^@^A^@vuln^@^A^@yes^@^

使用sed我想用几个空格删除所有^@^A^(以及那些字符的变体)。

我试过了:

cat -A file | sed 's/\^A\^\@/  /'

但那显然是错的,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

如果您可以枚举允许的字符,那么您可以执行类似

的操作
sed -e 's/[^a-zA-Z0-9]/ /g' 

将用空格替换字母数字字符集中的所有

如果您只想用空格替换所有'不可打印'字符,那么您可以使用字符类[1]和

sed -e 's/[^[:print:]]/ /g'

某些旧版本的sed可能不支持这种语法,但它在unix规范中已标准化,因此您不应对使用它感到内疚。[2]

[1] http://sed.sourceforge.net/sedfaq3.html

[2] http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03

答案 1 :(得分:2)

看起来^A不是两个字符,但实际上只是一个控制字符。所以你应该写一些类似\x01的内容。

无论如何,有三个字符范围,\x00-\x1f是控制字符,\x20-\x7f是ascii,其他是...依赖于编码的东西。

我不太了解sed,但如果你只想要ascii,那就是我在perl中的表现:

head /dev/urandom | perl -pe 's/[^\x20-\x7f]/ /gi'

答案 2 :(得分:1)

如果只替换^ A和^ @,您可以使用:

sed 's/[\x01\x0]/ /g' file

然后我在SO中找到了更多类似的答案。

https://superuser.com/questions/75130/how-to-remove-this-symbol-with-vim

Replacing Control Character in sed