使用Grep查找两个短语(包括短语)之间的文本块

时间:2012-11-30 03:25:28

标签: regex linux unix grep bbedit

是否可以将grep用于高精简版的所有文本:

mutablePath = CGPathCreateMutable();

以:

结尾
CGPathAddPath(skinMutablePath, NULL, mutablePath);

这两个短语之间是否有任意数量的文本?

注意:我必须使用grep,因为我使用的是BBEdit。

3 个答案:

答案 0 :(得分:3)

您需要使用GNU grep

grep -oPz 'mutablePath = CGPathCreateMutable\(\);.*?(\n.*?)*.*?CGPathAddPath\(skinMutablePath, NULL, mutablePath\);' file

如果您没有GNU grep,可以使用pcregrep来实现相同的目标:

pcregrep -M 'mutablePath = CGPathCreateMutable\(\);.*(\n|.)*CGPathAddPath\(skinMutablePath, NULL, mutablePath\);' file

答案 1 :(得分:0)

你可以像这样使用sed:

sed -n '/mutablePath = CGPathCreateMutable();/,/CGPathAddPath(skinMutablePath, NULL, mutablePath);/p' infile

修改

不确定BBEdit中是否支持grep的-P标志。如果是,那么你可以使用它:

grep -oP 'mutablePath = CGPathCreateMutable();\X*CGPathAddPath(skinMutablePath, NULL, mutablePath);/' infile

根据grep手册页:

  

-P, - pel-regexp        将PATTERN解释为Perl正则表达式。

答案 2 :(得分:0)

如果您想打印这些行之间的行,可以使用:

perl -ne '/start line/ .. /end line/ and print'