替换 sed 中的控制字符

问题描述 投票:0回答:5

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

linux bash shell sed
5个回答
35
投票

尝试:

sed 's/^A/foo/g' file

使用 Ctrl+V+A 在上述命令中创建

^A
序列。


22
投票

通过“替换”,我假设您想“就地”更改文件。

使用 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

给予...

SOH

-i
选项在 OS X sed 上不起作用,因此您需要通过将 sed 通过管道传输到临时文件来解决该问题。


20
投票

这可以通过

cat
-v
来完成(相当于
--show-nonprinting
选项并将其通过管道传输到
sed
)。

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

cat -v file | sed 's/\^A/\t/g' > out

cat -v
会将 SOH 字符替换为 ^A,然后在
sed
中进行匹配和替换。


7
投票

你想用什么来代替它们? 如果替换的是单个字符,

tr
是比
sed
更好的选择。 替换为字母“a”:

tr '\1' a < input-file > tmp && mv tmp input-file

0
投票

您可以使用 tr 命令

tr -s ' ' '|'新文件

tr -s“单词或分隔符”想要替换为“单词或分隔符”新文件

© www.soinside.com 2019 - 2024. All rights reserved.