2017-12-07 3 views
0

私は2つのgrepコマンドを使用してそれを行うには、管理は/usr/include/stdio.hgrepを使用して複数の行ブロックコメントの数を調べる方法は?

で複数行にまたがるブロックコメントの数を見つけようとしている:これは指定でき

egrep '/\*' /usr/include/stdio.h | egrep -cv '\*/' 

1つの正規表現だけを使用して、よりエレガントな方法で行われますか?

+1

あなたはPCREサポート付きの 'grep'を持っている場合は、* /' 'が続いていないこと、' '/ *と一致するように負の先読みを使用することができます。 – Barmar

+0

しかし、それは拡張正規表現だけで行うことができますか? – yabk

+1

拡張REで否定的な先読みを実行するのは難しいです。 – Barmar

答えて

2

PCREがご使用のバージョンgrep(たとえばGNU grep)でサポートされている場合、最も簡単な方法は否定的な先読みです。

grep -P '/\*(?!.*\*/)' filename 

一般的に否定的な先読みを行うことは、拡張されたREだけでは困難です。次のようになりますが、単一行のコメントが**/で終わる場合は機能しません。

grep -E '/\*[^*]*((\*($|[^/]))?[^*]*)*$' 

DEMO

+0

コメントの中に2つの「*」がある場合、これは機能しません。 例えば、 '/ *これは*複数行*コメント'です(私はREの式についてあなたのPCREの例を扱っています) – yabk

+0

'(...)* 'で最後の部分を繰り返すように修正しました – Barmar

+0

まだありません'/ *これは複数行のコメントです* asdfasdf ** /' – yabk

関連する問題