if
C ソース ファイルのコレクションで単純なステートメントを検索したいと考えています。
これらは次の形式のステートメントです。
if (condition)
statement;
同じ行のif
. 「if(条件)」と「文;」の間にコメントが入る場合があります。
次の形式の複合ステートメントを除外したい:
if (condition)
{
statement;
statement;
}
awkで次のそれぞれを試しました:
awk '/if \(.*\)[^{]+;/ {print NR $0}' file.c # (A) No results
awk '/if \(.*\)[^{]+/ {print NR $0}' file.c # (B)
awk '/if \(.*\)/ {print NR $0}' file.c # (C)
(B) と (C) では異なる結果が得られます。どちらにも、探しているアイテムと除外したいアイテムが含まれています。問題の一部は、明らかに、複数の行にまたがるパターンを処理する方法です。
特殊なケース (不適切な形式のコメント、奇妙なインデント、奇妙な場所での中括弧など) は無視できます。
どうすればこれを達成できますか?