如何全局替换具有控制字符的文件中的该单词。我怎样才能做到这一点 ?我尝试过以下方法但没有成功。
Replace "^Aabc_def_a^B" with "^Adef_a^B" globally
尝试了以下
sed -i 's/^Aabc_def_a^B/^Adef_a^B/g' file.txt
sed -i 's/\^Aabc_def_a\^B/\^Adef_a\^B/g'file.txt
sed 's/x01abc_def_ax02/x01def_ax02/g'
答案1
似乎对我有用:
$ echo -n "^Aword^B" | sed 's/^Aword^B/^Alexical unit^B/' | hexdump -C
00000000 01 6c 65 78 69 63 61 6c 20 75 6e 69 74 02 0a |.lexical unit..|
0000000f
01
代表^A
;02
代表^B
。
请记住,我使用的是文字控制字符,而不是插入符号 ( ^
) 后跟A
或B
。要在编写sed
命令时输入它们,请使用Ctrl-V后跟控制字符来按字面插入它,而不是将readline
其解析为输入。
换句话说,要插入^A
,请按Ctrl- ,V然后按Ctrl- A,您将看到^A
显示为您的输入。如果您尝试用箭头跳过此选项,您会发现光标始终将其视为单个单元,即使它在屏幕上由两个字符组成。
答案2
在 GNU sed 中,工作原理:\xHH
$ printf '\001foo\002\n' | sed 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
如果您没有 GNU sed,但有 Bash,则可以使用$''
引号在 shell 中生成控制字符:
$ printf '\001foo\002\n' | sed $'s/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
如果你两者都没有,总有 Perl 也能理解:\xHH
$ printf '\001foo\002\n' | perl -pe 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
当然,您也可以对 执行同样的操作-i
。