我有一个包含多行 xml 的文件。我想替换文件的某些部分。文件的某些部分包含"
我想要替换的引号 ( )。我一直在努力逃脱引号\
,但我认为根据我的文件的结果,这不起作用。
这是我的 sed 命令之一的示例:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
这是您在 sed 命令中转义引号的方式还是我做错了什么?
答案1
两个提示:
您无法转义用单引号引起来的字符串中的单引号。因此,您必须关闭报价,添加转义报价,然后再次打开报价。即:
'foo'\''bar'
,分解为:'foo'
引foo
\'
逃脱了'
'bar'
引bar
屈服
foo'bar
。- (可选)您不一定必须
/
在 sed 中使用。我发现在同一个 sed 表达式中使用/
and\
会使阅读变得困难。
例如,要从此文件中删除引号:
$ cat /tmp/f
aaa"bbb"'ccc'aaa
鉴于我上面的两个提示,您可以用来删除双引号和单引号的命令是:
$ sed -e 's|["'\'']||g' /tmp/f
根据我的第一个技巧,shell 将 sed 的第二个参数(即 后面的字符串-e
)缩减为s|["']||g
并将该字符串传递给 sed。根据我的第二个技巧,sed 将其视为与s/['"]//g
.它的意思是
删除所有与
'
或匹配的字符"
(即,将其替换为空)
您可能需要比这更复杂的东西来完成您想要的事情,但这只是一个开始。
答案2
我有一个 unix 实用程序的 Windows 端口,因此命令看起来有点不同,但我有一个带有逗号和引号的 csv 文件。使用此线程作为指南,我可以通过以下命令删除引号:
c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g"