希望你明白我的要求。 在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,但我认为我不够聪明,无法理解正则表达式。 谢谢。
答案 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]