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

使用sed删除特殊字符并添加空格,sed,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\^\@/ /' 但这显然是错误的,有人能帮忙吗?看起来,^A不是两个字符,实际上只是一个控制字符。因此,您应该编写类似于\

我有一段文字要更改:

^@^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\^\@/  /'

但这显然是错误的,有人能帮忙吗?

看起来,
^A
不是两个字符,实际上只是一个控制字符。因此,您应该编写类似于
\x01
的内容

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

我对sed不太了解,但如果您只需要ascii,我会用perl实现这一点:


head/dev/uradom | perl-pe的//[^\x20-\x7f]//gi'
看起来
^A
不是两个字符,实际上只是一个控制字符。因此,您应该编写类似于
\x01
的内容

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

我对sed不太了解,但如果您只需要ascii,我会用perl实现这一点:


head/dev/uradom|perl-pe的//[^\x20-\x7f]//gi'

如果可以枚举允许的字符,那么可以执行以下操作

sed -e 's/[^a-zA-Z0-9]/ /g' 
这将用空格替换字母数字字符集合以外的所有字符

如果您只想用空格替换所有“不可打印”字符,则可以使用字符类[1]替换

sed -e 's/[^[:print:]]/ /g'
但是,一些旧版本的sed可能不支持这种语法,但它在unix规范中是标准化的,因此您不应该因为使用它而感到内疚。[2]

[1]


[2]

如果可以枚举允许的字符,则可以执行以下操作

sed -e 's/[^a-zA-Z0-9]/ /g' 
这将用空格替换字母数字字符集合以外的所有字符

如果您只想用空格替换所有“不可打印”字符,则可以使用字符类[1]替换

sed -e 's/[^[:print:]]/ /g'
但是,一些旧版本的sed可能不支持这种语法,但它在unix规范中是标准化的,因此您不应该因为使用它而感到内疚。[2]

[1]


[2]

如果仅替换^A和^A,则可以使用以下选项:

sed 's/[\x01\x0]/ /g' file
然后我在SO中找到了更多类似的答案,这些答案已经讨论过了


如果仅替换^A和^A,则可以使用以下选项:

sed 's/[\x01\x0]/ /g' file
然后我在SO中找到了更多类似的答案,这些答案已经讨论过了


哎呀。抱歉,试图修复我的vim/chrome集成时,我似乎打破了前导空格。修正了。抱歉,试图修复我的vim/chrome集成时,我似乎打破了前导空格。固定的。