我尝试从我的xml文件中删除一个单词的所有出现。我想删除的模式如下所示:
& lt;foo_bar>300</foo_bar& gt;
我不熟悉sed,但我知道使用它是可行的。我试过像:
sed 's^<[foo_bar]>$g' myfile.xml
或
sed 's/^<[foo_bar]>$//' myfile.xml
都失败并显示错误消息。那么请你帮我解决一下这个问题?操作系统是Solaris 10,所以最有可能的标准版本是sed安装而不是GNU安装。请在&amp;之后忽略空格签到表达式。实际表达中没有空格。
由于
答案 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