使用sed删除匹配的模式

时间:2013-03-05 07:49:58

标签: sed

我尝试从我的xml文件中删除一个单词的所有出现。我想删除的模式如下所示:

& lt;foo_bar>300</foo_bar& gt;

我不熟悉sed,但我知道使用它是可行的。我试过像:

sed 's^&lt[foo_bar]>$g' myfile.xml

sed 's/^&lt[foo_bar]>$//' myfile.xml

都失败并显示错误消息。那么请你帮我解决一下这个问题?操作系统是Solaris 10,所以最有可能的标准版本是sed安装而不是GNU安装。请在&之后忽略空格签到表达式。实际表达中没有空格。

由于

2 个答案:

答案 0 :(得分:1)

至少,你使用字符类[foo_bar]的方式是错误的。 [foo_bar]只能匹配一次f,o,b,a,r,_。而你似乎没有尝试匹配/。你的第一个表达式缺少正则表达式分隔符。 sed将假设您使用^作为分隔符,但它缺少与s^find^replace^g中相应的分隔符。

这似乎有效:

sed 's!<foo_bar>[^&]*</foo_bar>!!g' input

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/&\s*lt;(foo_bar&)gt;[0-9]+<\/\1\s*gt;//g' file