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

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何按部分grep?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个像这样结构的文件

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.

猜你在找的正则表达式相关文章