如何用sed替换文件中的引号?

jbr*_*aud 16 sed

我有一个包含多行 xml 的文件。我想替换文件的某些部分。文件的某些部分包含"我想替换的引号 ( )。我一直试图用 来转义引号\,但根据我的文件结果,我认为这不起作用。

这是我的 sed 命令之一的示例:

sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
Run Code Online (Sandbox Code Playgroud)

这是您在 sed 命令中转义引号的方式还是我做错了什么?

小智 15

两个提示:

  1. 您不能在用单引号引用的字符串中转义单引号。所以你必须关闭引用,添加一个转义的引用,然后再次打开引用。即:'foo'\''bar',分解为:

    • 'foo'        引 foo
    • \'             逃脱 '
    • 'bar'        引 bar

    屈服foo'bar

  2. (可选)您不一定必须/在 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. 它的意思是

删除所有匹配的字符'"   (即,用空替换它们)

您可能需要比这更复杂的东西来做您想做的事,但这是一个开始。