是否可以将grep用于高精简版的所有文本:
mutablePath = CGPathCreateMutable();
以:
结尾CGPathAddPath(skinMutablePath, NULL, mutablePath);
这两个短语之间是否有任意数量的文本?
注意:我必须使用grep,因为我使用的是BBEdit。
答案 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'