删除Linux中XML标记中的双引号和空格

问题描述 投票:0回答:1

我想在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

请为我建议正确的语法。

xml linux text-processing
1个回答
0
投票

您的正则表达式正在寻找确切的字符串"",而不是其中的任何字符。使用[]字符集运算符可匹配任何字符集。

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。

© www.soinside.com 2019 - 2024. All rights reserved.