如何使用 sed 用控制字符替换文件中的单词

如何使用 sed 用控制字符替换文件中的单词

如何全局替换具有控制字符的文件中的该单词。我怎样才能做到这一点 ?我尝试过以下方法但没有成功。

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

请记住,我使用的是文字控制字符,而不是插入符号 ( ^) 后跟AB。要在编写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

相关内容