我想要改变一段文字:
^@^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\^\@/ /'
但那显然是错的,有人可以帮忙吗?
答案 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