Perl条件提取文件中的行

时间:2014-10-21 09:49:53

标签: perl grep

有人可以建议我一种方法,我可以在阅读时提取几行文字。

文件样本结构:

A blah blah string1
B blah blah
C blah string2
D blah string3 blah
E blah blah
F blah string2
G blah string3 blah
H blah blah string1
I blah blah
J blah string2

这里我想提取以字符串" string1"开头的行。跟随/结束" string2" 实际上,我想要上面例子中的A-C和H-J行。

我的实验失败了,我想忽略F行。

2 个答案:

答案 0 :(得分:1)

Perl one liner和Flip-flop Operator ..

$ perl -ne 'print if /\bstring1\b/ .. /\bstring2\b/' file
A blah blah string1
B blah blah
C blah string2
H blah blah string1
I blah blah
J blah string2
上述正则表达式中的

\b称为字边界。它匹配单词characetr和非单词字符。

来自Perl --help

-n                assume "while (<>) { ... }" loop around program
-e program        one line of program (several -e's allowed, omit programfile)

答案 1 :(得分:0)

这也可以在awksed中通过指明您要打印行的模式来完成:

sed -n '/string1/,/string2/p' file
awk '/string1/,/string2/' file

Perl中,您可以说:

perl -e 'while (<>){print if (/string1/../string2/);}' file

相当于

perl -ne '{print if (/string1/../string2/)}' file
      ^

所有人都回来了:

A blah blah string1
B blah blah
C blah string2
H blah blah string1
I blah blah
J blah string2