2013-10-04 187 views
1

我希望使用sed刪除xml文件中所有事件的「foo = 1 &」和「bar = 2 &」之間的所有字符。sed:刪除兩個字符串之間的字符

<url>http://example.com?addr=123&foo=1&s=alkjasldkffjskdk$bar=2&f=jkdng</url> 
<url>http://example.com?addr=124&foo=1&k=d93ndkdisnskiisndjdjdj$bar=2&p=dnsks</url> 

這裏是我的sed命令:

sed -e '/foo=1&/,/bar=2&/d' sample.xml 

當我運行此,該文件是不變的。

以上是基於這個例子:Find "string1" and delete between that and "string2"

+0

是。當我添加-i標誌時,我最終得到一個空文件 – Sparky1

+1

這可能需要移動到Linux/Unix stackexchange。 – Plasmarob

回答

5

使用替代命令,而不是刪除命令:

sed -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' 
+0

精美的作品!非常感謝。 – Sparky1

+0

這似乎也適用於我,但您能否請您準確解釋命令正在做什麼? – TheWalkingData

+0

's/regex/replacement /'用'replacement'替換每行中'regex'的第一個匹配項。 'regex'可以包含_groups_,這些_groups_可以用'\ 1','\ 2'等引用。在這種情況下,這個特性不是必須的,你可以使用's/foo = 1&。* bar = 2&/ foo = 1&bar = 2&/'而不是。 – nosid

2

您應該使用

sed -i -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' your_html.xml 
相關問題