我有一个像这样结构的文件:
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.