替换sed中的控制字符

时间:2012-11-01 15:14:25

标签: linux bash shell sed

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

5 个答案:

答案 0 :(得分:25)

尝试:

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

使用 Ctrl + V + A 在上述命令中创建^A序列。

答案 1 :(得分: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

...给出

SOH

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

答案 2 :(得分:17)

这可以通过cat使用-v(等效--show-nonprinting选项并将其汇总到sed)来完成。

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

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

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

答案 3 :(得分:6)

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

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

答案 4 :(得分:0)

您可以使用tr命令

tr -s&#39; \ 001&#39; &#39; |&#39; newfile中

tr -s&#34; word或delimiter&#34;想要替换为&#34; word或delimiter&#34; newfile