1

grep を使用して、次の 2 つの文字列の間にあるすべてのテキストを検索できるかどうか疑問に思っていました。

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 に答える