替换或删除某些文件中的不同文本

时间:2013-11-30 09:52:02

标签: regex replace sed

希望你明白我的要求。 在linux debian系统上

我在不同的导演中有1000个不同的文件* .bla * .bli * .blo。 使用以下行:

<!--blablo--><script src="xxxx://bla.blub/bla.xxx?id=blabla" type="text/javascript"></script><!--/blablo-->

<!--blabli--><script src="xxxx://bla.blub/bla.xxx?id=blibli" type="text/javascript"></script><!--/blabli-->

<!--blublu--><script src="xxxx://bla.blub/bla.xxx?id=bloblo" type="text/javascript"></script><!--/blublu-->

我想要的只是删除该行或用空格替换。 如果有人可以这么善良,请帮助我。

我尝试用sed,但我认为我不够聪明,无法理解正则表达式。 谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

for i in *.bl[aio]; do
    sed -i.bak '/--bl[a-z]bl[a-z]--/d' "$i"
done

答案 1 :(得分:0)

我认为您需要匹配的一般ERE:

<!--different--><script src="thisisalwaysthesame.org/different.php?id=different"; type="text/javascript"></script><!--/different-->

就是这样:

<!--[^-]+--><script src="thisisalwaysthesame[.]org/[^?]+[?]id=[^"]+"; type="text/javascript"></script><!--/[^-]+-->

你不能使用sed,因为“不同”的部分总是包含你选择的任何字符作为sed分隔符。

如果您引入了循环,则可以使用egrep -v

你可以使用awk,你只需要逃避RE中的“/”,因为这些是awk的分隔符,例如使用GNU awk进行就地编辑:

gawk -i inplace '{ print (/<!--[^-]+--><script src="thisisalwaysthesame[.]org/[^?]+[?]id=[^"]+"; type="text[/]javascript"><[/]script><!--[/][^-]+-->/ ? "" : $0) }' *.bl[aio]