Regex sed:删除两个字符串之间的字符

Regex sed:删除两个字符串之间的字符,regex,bash,sed,Regex,Bash,Sed,我想使用sed删除xml文件中所有出现的foo=1&和bar=2&之间的所有字符 <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删除xml文件中所有出现的foo=1&和bar=2&之间的所有字符

<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 -i -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' your_html.xml
你应该使用

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

对当我添加-I标志时,结果是一个空文件。这可能需要移动到Linux/Unix stackexchange.Yes。当我添加-I标志时,我得到的是一个空文件。这可能需要移动到Linux/Unix stackexchange。这似乎对我也适用,但请您确切解释一下该命令在做什么?s/regex/replacement/用replacement替换每行中regex的第一个匹配项。正则表达式可以包含组,这些组可以用\1、\2等引用。在这种情况下,此功能不是严格要求的,您可以使用s/foo=1&.*bar=2&/foo=1&bar=2&/来代替。如果字符串中有多个bar=2&会发生什么?因为这段代码一直读到最后一行,这对我来说似乎也很有效,但是你能确切地解释一下这个命令在做什么吗?s/regex/replacement/用replacement替换每行中regex的第一个匹配项。正则表达式可以包含组,这些组可以用\1、\2等引用。在这种情况下,此功能不是严格要求的,您可以使用s/foo=1&.*bar=2&/foo=1&bar=2&/来代替。如果字符串中有多个bar=2&会发生什么?因为这个代码一直读到最后一个我试过这个。。没用nosid之前的答案很好也许sed的版本不同我试过了。。不起作用nosid之前的回答很好也许sed的版本不同
 sed -i -e 's/\(foo=1&\).*\(bar=2&\)/\1\2/' your_html.xml