我需要在 linux 的文本文件中替换所有出现的控制字符 CTRL+A (SOH/ascii 1),如何在 SED 中实现?
问问题
50063 次
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 回答