使用sed逃脱&字符

时间:2019-06-06 23:59:59

标签: sed

我正在尝试使用gnu sed 4.7来转义两种文本模式之间的所有&字符。怎么会这样呢?

这是我的目标:

之前:

some&words& things& stuff###&this & area&is&what&should&change###more&text

之后:

some&words& things& stuff###\&this \& area\&is\&what\&should\&change###more&text

这是在从bash终端启动gnu sed 4.7的Linux服务器上。

sed -i -e "s/\(###\)\(.*\)\&\(.*\)\(###\)/\1\2\\\&\3\4/g" file.txt

上面的行不能转义任何&个字符。

2 个答案:

答案 0 :(得分:2)

使用perl非常简单:

perl -i -pE 's{(###.*?###)}{$1 =~ s/&/\\&/gr}eg' file.txt

我们使用嵌套替换。第一个模式仅捕获###分隔符之间的所有块,然后通过对捕获的字符串运行另一个替换来转义所有&字符,从而计算替换。

答案 1 :(得分:1)

这使我成为awk的工作:

UIViewController

或者像awk 'BEGIN {FS = OFS = "###"} {gsub(/&/,"\\\\&",$2)} 1' file 一样将文件保存到位:

sed -i

要解决@melpomene的有效评论,awk程序会有些罗word:

gawk -i inplace 'BEGIN {FS = OFS = "###"} {gsub(/&/,"\\\\&",$2)} 1' file