我想在Linux上的XML文件中的XML标记<ns:tag2>
的值中删除空格和引号(仅可为此标记除去空格,而不能在其他地方除去此间隙。
示例XML内容如下所示。
<ns:tag1>
<ns:tag2>Abcdef qwert/denn+hkg kmknn xyz""""""""""</ns:tag2>
</ns:tag1>
但是我需要如下所示编写文件。
<ns:tag1>
<ns:tag2>Abcdefqwert/denn+hkgkmknnxyz</ns:tag2>
</ns:tag1>
我在https://unix.stackexchange.com/questions/274736/remove-string-with-spaces-and-quotes-from-xml-file处看到了解决方案,并尝试使用sed命令删除引号,但没有运气。
sed 's/ ""//g' temp.xml
请为我建议正确的语法。
您的正则表达式正在寻找确切的字符串""
,而不是其中的任何字符。使用[]
字符集运算符可匹配任何字符集。
sed 's/[ "]//g' temp.xml
但是,这将删除all空格,而不仅仅是标记值中的空格。因此结果将是:
<ns:tag1>
<ns:tag2>Abcdefqwert/denn+hkgkmknnxyz</ns:tag2>
</ns:tag1>
并且如果您有带有属性的标签,它将删除属性之间的空格,例如
<ns:tag1 attr1="foo" attr2="1 2">
将成为
<ns:tag1attr1="foo"attr2="12">
仅使用正则表达式可能不可行。我建议使用诸如xmlstarlet
之类的XML解析工具。您可以将值提取到变量中,删除空格和引号,然后使用结果生成新的XML。