SED删除字符之间的空白区域

时间:2010-11-18 21:19:57

标签: unix sed

我有一个xml文件,其行应如下所示:

<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item>

我可以轻松替换下面的" myurl=",使该行看起来像上面那样。

<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item>

不幸的是,他们中的大多数都是这样的,b / t中的空格量不同:

<item id=""><myname>FIRST NAME"                   
         myURL="http://etc.com</myurl></item>

我似乎无法使用b / t字符中的空格替换工作SED

2 个答案:

答案 0 :(得分:1)

你正在寻找正则表达式's/ */ /g'吗?

对于两个或多个空格的所有字符串,这将替换单个空格。

答案 1 :(得分:0)

sed '/myname>.*\"\s*$/N;s|\"\s*\n*\s*myURL=\"|</myname><myurl>|' file.xml

首先测试线是否不完整。如果是,则将下一行放入模式空间。在任何一种情况下,它都会用原始文本替换所需的文本。

顺便说一句,如果有人能告诉我一种方法来匹配字符集中模式空间中的换行符,我将不胜感激。例如,[\s\n]*代替上述表达式中的\s*\n*\s*

输入:

<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item>
<item id=""><myname>FIRST NAME"                   
         myURL="http://etc.com</myurl></item>
<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item>

输出:

<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item>
<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item>
<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item>