替换sed中的控制字符

mya*_*hya 19 linux bash shell sed

我需要在linux的文本文件中替换所有出现的控制字符CTRL + A(SOH/ascii 1),如何在SED中实现?

dog*_*ane 27

尝试:

sed 's/^A/foo/g' file
Run Code Online (Sandbox Code Playgroud)

使用Ctrl+ V+ 在上面的命令中A创建^A序列.

  • "Ctrl-V A"快捷方式的好点.我准备将其添加为对我的回答的评论.我最初建议使用\ x01语法,因为它更容易复制并粘贴到脚本中,并直观地检查它是否是正确的字符(在某些编辑器中). (3认同)

Mar*_*lis 19

通过"替换",我假设您想要"就地"更改文件.

使用GNU sed:

# Create a file with a single control character (SOH)
echo -e "\x01" > file
# Change SOH control characters to the literal string "SOH"
sed -i 's/\x01/SOH/g' file
# Check result
cat file
Run Code Online (Sandbox Code Playgroud)

给...

SOH
Run Code Online (Sandbox Code Playgroud)

-i选项在OS X sed上不起作用,因此您需要通过将sed传递给临时文件来解决这个问题.

  • 实际上 OSX `sed` 也有 `-i`,尽管它需要一个参数。如果您不需要备份,请尝试“sed -i ''”。 (2认同)

mya*_*hya 19

这可以通过完成cat-v(等效--show-nonprinting选项和管道到这一点sed).

如果控制字符是标题开头(SOH)字符(CTRL + A/ASCII 1),并且我们想用标签替换它,我们将执行以下操作:

cat -v file | sed 's/\^A/\t/g' > out
Run Code Online (Sandbox Code Playgroud)

cat -v将用^ A替换SOH字符,然后匹配并替换sed.


Wil*_*ell 6

你想用什么替换它们?如果替换是单个字符,tr则是比较好的选择sed.用字母'a'代替:

tr '\1' a < input-file > tmp && mv tmp input-file
Run Code Online (Sandbox Code Playgroud)