我有一个包含多行 xml 的文件。我想替换文件的某些部分。文件的某些部分包含"我想替换的引号 ( )。我一直试图用 来转义引号\,但根据我的文件结果,我认为这不起作用。
这是我的 sed 命令之一的示例:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
Run Code Online (Sandbox Code Playgroud)
这是您在 sed 命令中转义引号的方式还是我做错了什么?
小智 15
两个提示:
您不能在用单引号引用的字符串中转义单引号。所以你必须关闭引用,添加一个转义的引用,然后再次打开引用。即:'foo'\''bar',分解为:
'foo' 引 foo\' 逃脱 ''bar' 引 bar屈服foo'bar。
/在 sed 中使用。我发现在同一个 sed 表达式中使用/和\会使阅读变得困难。例如,要从此文件中删除引号:
$ cat /tmp/f
aaa"bbb"'ccc'aaa
Run Code Online (Sandbox Code Playgroud)
鉴于我上面的两个提示,您可以用来删除双引号和单引号的命令是:
$ sed -e 's|["'\'']||g' /tmp/f
Run Code Online (Sandbox Code Playgroud)
根据我的第一个技巧,shell 将 sed 的第二个参数(即 之后的字符串-e)减少为s|["']||g并将该字符串传递给 sed。根据我的第二个技巧,sed 将其视为与s/['"]//g. 它的意思是
删除所有匹配的字符
'或"(即,用空替换它们)
您可能需要比这更复杂的东西来做您想做的事,但这是一个开始。