3

是否可以使用 grep 来精简所有以以下开头的文本:

mutablePath = CGPathCreateMutable();

并以:

CGPathAddPath(skinMutablePath, NULL, mutablePath);

在这两个短语之间哪里有任意数量的文本?

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

4

3 回答 3

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
于 2012-11-30T03:53:25.280 回答
0

您可以像这样使用 sed:

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

编辑:

不确定-PBBEdit 是否支持 grep 标志。如果是,那么你可以使用这个:

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

根据 grep 手册页:

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

于 2012-11-30T03:29:29.920 回答
0

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

perl -ne '/start line/ .. /end line/ and print'
于 2012-11-30T03:31:18.260 回答