1

我想知道是否可以使用 grep 来查找以下两个字符串之间的所有文本:

mutablePath = CGPathCreateMutable();
...
CGPathAddPath(skinMutablePath, NULL, mutablePath);

基本上,第一行和最后一行总是相同的,中间会有一大堆随机的东西。我想从上面计算第一行和最后一行的所有实例之间出现的行数。

这甚至可能吗?

4

3 回答 3

2

这是另一个awk解决方案:

awk '/^mutablePath = CGPathCreateMutable\(\);$/ { m=1; c=0 }
     /^CGPathAddPath\(skinMutablePath, NULL, mutablePath\);$/ { print c-1; m=0 }
     m { c++ }'  file
于 2012-11-30T02:21:03.313 回答
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
于 2012-11-30T02:09:30.710 回答
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
于 2012-11-30T02:10:13.487 回答