回答:
grep -o -n '[{}]' <filename> | cut -d : -f 1 | uniq -c
出力は次のようになります。
3 1
1 2
1行目に3回、2行目に1回の意味。
regex
正規表現は簡単な部分であるため、タグ付けされていません。
sort -n
ですか?とにかく行番号順に出てこないのですか?
sort -n
必要ではありません。ありがとう。
grep
要件を使用していますか?代替手段は次のとおりです。
sed 's / [^ {}] // g' your_file | awk '{print NR、length}'
sed
以外のすべての文字アウトのストリップ{
と}
(すなわち、のみ残し{
や}
文字)、その後、awk
(ちょうどある各行の数文字{
と}
文字)。一致しない行を抑制するには、
sed 's / [^ {}] // g' your_file | awk '/./ {印刷NR、長さ}'
私のソリューションは、探している文字列が単一の文字であると仮定していることに注意してください。Moebiusの答えは、複数文字の文字列により簡単に適合します。また、いずれの回答も、対象となる文字/文字列の引用またはエスケープされた出現を除外しません。例えば、
{ "nullfunc() {}" }
4つの中括弧文字が含まれていると見なされます。
grep
本当に要件ではありませんでした。解決策を探し始めたところです。私はawkを必要としなかったので、上記の答えを使用していなかったなら、これを実験の機会として使用していたでしょう-まだかもしれません。私が明らかにしなかったのは(しかし、どちらの答えにも影響しません)、ほとんどのペアが発生するミスマッチ(LaTeXソースでは、ここでは表)を追跡するために、ブラケットごとに1回スクリプトを実行したかったということです単一の行。
sed 's/{[^{}]*}//g' your_file | grep –n '[{}]'
は、sed
ストリップ(一致)ペアを削除するなどの方法を試してください。ネストされたペアがある場合は、を使用してsed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …
、s/{[^{}]*}//g
最も深いネストと同じ回数だけ繰り返します。
sort
grepの出力は行番号でソートされるため、これは厳密には必要ありませんが、以前は良い習慣だったと思いuniq
ます。