是否可以使用 grep 来精简所有以以下开头的文本:
mutablePath = CGPathCreateMutable();
并以:
CGPathAddPath(skinMutablePath, NULL, mutablePath);
在这两个短语之间哪里有任意数量的文本?
注意:我必须使用 grep,因为我使用的是 BBEdit。
您将需要使用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
您可以像这样使用 sed:
sed -n '/mutablePath = CGPathCreateMutable();/,/CGPathAddPath(skinMutablePath, NULL, mutablePath);/p' infile
编辑:
不确定-P
BBEdit 是否支持 grep 标志。如果是,那么你可以使用这个:
grep -oP 'mutablePath = CGPathCreateMutable();\X*CGPathAddPath(skinMutablePath, NULL, mutablePath);/' infile
根据 grep 手册页:
-P, --perl-regexp 将 PATTERN 解释为 Perl 正则表达式。
如果您想打印这些之间的行并包括这些行,您可以使用:
perl -ne '/start line/ .. /end line/ and print'