我想知道是否可以使用grep来查找以下两个字符串之间的所有文本:
mutablePath = CGPathCreateMutable();
...
CGPathAddPath(skinMutablePath, NULL, mutablePath);
基本上,第一行和最后一行总是相同的,中间会有一大堆随机的东西。我想计算从上面开始的第一行和最后一行的所有实例之间出现的行数。
这甚至可能吗?
答案 0 :(得分:2)
这是另一个awk
解决方案:
awk '/^mutablePath = CGPathCreateMutable\(\);$/ { m=1; c=0 }
/^CGPathAddPath\(skinMutablePath, NULL, mutablePath\);$/ { print c-1; m=0 }
m { c++ }' file
答案 1 :(得分:1)
您无法使用grep
执行此操作,但可以使用awk
执行此操作。这完全未经测试但应该有效:
awk 'BEGIN { state = 0; count = 0; }
/^mutablePath = CGPathCreateMutable();$/ { state = 1; }
/^CGPathAddPath(skinMutablePath, NULL, mutablePath);$/
{ print count; state = 0; count = 0 }
{ if (state) count++; }' FILE_OF_INTEREST
答案 2 :(得分:1)
如果除了awk
之外您还可以访问grep
,那么这是awk '/^mutablePath = CGPathCreateMutable\(\)\;$/ {in_block=1}
in_block==1 {count++}
/^CGPathAddPath\(skinMutablePath, NULL, mutablePath\)$/ {in_block==0; count--}
END{print count}' input
解决方案:
{{1}}