加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何按部分grep?

发布时间:2020-12-14 05:49:52 所属栏目:百科 来源:网络整理
导读:我有一个像这样结构的文件: BOF-------Title1-------stuff heresome stuff-------Title2-------extra thingsextra thingsextra things-------Title3-------and some stuff here...-------Title4-------stuffEOF 现在我想做这样的事情: grep-by-section KEY
我有一个像这样结构的文件:

BOF

-------Title1-------
stuff here
some stuff

-------Title2-------
extra things
extra things
extra things

-------Title3-------
and some stuff
   here

...

-------Title4-------
stuff

EOF

现在我想做这样的事情:

grep-by-section KEYWORD DELIMITER my-file

以便

grep-by-section "some" "^---" my-file

输出

-------Title1-------
stuff here
some stuff

-------Title3-------
and some stuff
   here

我想找到一个特定的关键字,对于每个发现我想在已知的分隔符之间输出整个块.我怎样才能做到这一点?我在这里失败了.

这里的分隔符是“——”,但可能是[0-9] {8}格式的数字之类的东西.

我无法解决的类似问题是输出块的内容,而不是输出块的标题.

使用perl比使用sed更容易解决

解决方法

#!/usr/bin/perl
my ($search,$del) = splice(@ARGV,2);
local $/;
while (<>) {
   for (/($del(?:(?!$del).)*)/smg) {
      print if /$search/sm;
   }
}

笔记:

> local $/导致以下readline一次读取一个文件而不是一次读取一行.>(?:(?!STRING).)*是STRING,因为[^ CHAR] *是CHAR.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读