2014-02-18 51 views
0

我有一个文本块,我想改起来:使用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\^\@/ /' 

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

回答

2

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

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

我不知道的sed很好,但如果你想ASCII只,这是我怎么会在Perl已经做到了:

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

+1

+1,为什么没有人投票,所以简单的解决方案。 – BMW

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

+0

在这里有146点,你现在应该如何使用代码标签... – Jotne

+0

糟糕。对不起,试图修复我的vim/chrome集成我似乎已经打破了领先的空间。固定。 –