20

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

4

5 回答 5

30

尝试:

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

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

于 2012-11-01T15:32:32.190 回答
21

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

使用 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 管道传输到临时文件来解决该问题。

于 2012-11-01T15:31:21.207 回答
20

这可以通过cat-v等效地--show-nonprinting选项并将其输入sed)来完成。

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

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

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

于 2012-11-09T14:53:05.447 回答
7

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

tr '\1' a < input-file > tmp && mv tmp input-file
于 2012-11-01T16:59:41.810 回答
0

您可以使用 tr 命令

tr -s '\001' '|' 新文件

tr -s "word or delimiter" 想替换成 "word or delimiter" newfile

于 2016-05-03T18:59:47.520 回答