我需要替换Linux中文本文件中所有出现的控制字符CTRL+A(SOH/ascii代码1),这在SED中如何实现?
尝试:
sed 's/^A/foo/g' file
使用 Ctrl+V+A 在上述命令中创建
^A
序列。
通过“替换”,我假设您想“就地”更改文件。
使用 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 通过管道传输到临时文件来解决该问题。
这可以通过
cat
和 -v
来完成(相当于 --show-nonprinting
选项并将其通过管道传输到 sed
)。
如果控制字符是标题开始 (SOH) 字符 (CTRL+A / ASCII 1),并且我们想用制表符替换它,我们将执行以下操作:
cat -v file | sed 's/\^A/\t/g' > out
cat -v
会将 SOH 字符替换为 ^A,然后在 sed
中进行匹配和替换。
你想用什么来代替它们? 如果替换的是单个字符,
tr
是比 sed
更好的选择。 替换为字母“a”:
tr '\1' a < input-file > tmp && mv tmp input-file
您可以使用 tr 命令
tr -s ' ' '|'新文件
tr -s“单词或分隔符”想要替换为“单词或分隔符”新文件