Grep for Weird String

时间:2012-11-30 02:03:55

标签: grep

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

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

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

这甚至可能吗?

3 个答案:

答案 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}}