正则表达式如何跨行使用?

TaoKY
  • 30

需要处理 50 多个文件,把「阅读(...)」后面的内容全部删去:

文档像是这样:

文章正文……

阅读(...) | 评论(...)

(后面一堆无用的内容)

我尝试了正则表达式,但是结果发现:

➜  grep -n "阅读(.*" 3604941420111111104532711.html
41:阅读(362)| 评论(76)

正则表达式只能返回一行的内容,而不是这一行之后的所有内容,无法满足需求。

请问用什么正则表达式可以解决?或是有其他的办法吗?

回复
阅读 8.6k
3 个回答

看样子你需要的不是跨行正则表达式吧……

你需要的是不是删除匹配的那一行之后的内容?那样可以考虑获取匹配的那一行的行号,删除剩下的行号比它更大的行。

举个例子,你可以用sed这么做:

sed -i "/阅读(.*/q" 3604941420111111104532711.html

可能需要写程序,读入文件为字符串吧。

grep 没这个功能貌似。

grep -Pzo '(?s)a.*b' <file>

好像可以匹配

a
cccccc
dddddd
b

这样的玩意儿……

使用 Perl 模式。

你知道吗?

宣传栏