我有一个像
这样的文本文件Hi
how are you
<blank>
<blank>
abcd
<blank>
defgh
opqr
<blank>
我想要打印所有具有“some text”模式的行“blankblank”some text“ 喜欢
how are you
<blank>
<blank>
abcd
我正在考虑使用join然后搜索模式。但我不知道该怎么做。 (空白我的意思是空行)
答案 0 :(得分:3)
/^(?:(?!\n)\s)*\n/m
/^.*\S.*\n/m
所以你想要打印所有的实例:
/
^
(?:
.*\S.*\n
(?: (?:(?!\n)\s)*\n ){2}
)+
.*\S.*\n
/mx
作为一个单独的班轮:
perl -0777ne'print /^(?:.*\S.*\n(?:(?:(?!\n)\s)*\n){2})+.*\S.*\n/mg' file
如果所有空行都不包含空格,则可以简化一些:
/^\n/m
/^.+\n/m
perl -0777ne'print /^(?:.+\n\n\n)+.+\n/mg' file
答案 1 :(得分:1)
也许我不理解这个问题。我想你要问的是如何匹配2个具有相同文本(“某些文本”)的连续行并打印出来。
要做到这一点你可以做这样的事情
假设文件存储为$ file
中的字符串print "$1\n$1" while ($file =~ /(.*)(?=\n\1(?:\n|$))/mg);
。* =匹配任何东西,尽可能多地抓起来
()=捕获组,在这种情况下将*。存储为$ 1
(?= ...)=向前看,以便该部分字符串可用于下一场比赛
\ 1 =在第一个捕获组中捕获的任何内容(即$ 1)
(?:...)=非捕获组