我的XML文件很少,有些用户在中间添加了额外的空格(比如在元素标签或文本标签中),并且很难比较多个版本的文件。
示例(xml文件)
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author >
<title>XML Developer's Guide </title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102" >
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
正如您在上面的示例代码中看到的那样,作者的元素标记和第一本书元素中标题的文本节点具有额外的空格。类似地,第二本书元素的元素标签有额外的空格。
我想要一个正则表达式来搜索这些类型的空格(超过1个相邻的空格),但我不想要前导的空格。如果我没有留下前导空格(从行开始),并用单个空格替换它们,缩进将会丢失。
有一些方法可以处理这个问题(比如首先删除所有的double +空格并在文件上执行xmllint --format),但是如果有人可以给我一个reg exp来表示行中间的空格会很有用
我尝试了^,\ s和^ \ s的组合,但我似乎无法得到解决方案。因此,如果有人可以提出建议,那将非常有帮助。 (根据我们项目的设计,文本节点中的多个空格是不正确的值。因此删除它们不会造成任何不利影响)
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed -r 's/(\S)\s+([<>])/\1\2/g' file
这会查找非空格,后跟一个或多个空格,后跟<
或>
,并删除空格一次或多次。