2 つの可能なパターンで始まる行を無視します。

2 つの可能なパターンで始まる行を無視します。

ソースコードを分析して、それぞれ異なる関数やサブルーチンをファイルに出力しようとします。私の質問は、ソースコードが次のようになる可能性があることです。

SUBROUTINE ABC
---
END SUBROUTINE
---
#SUBROUTINE to compute...
SUBROUTINE Dummy
---
      WRITE SUBROUTINE XX has finished...
END SUBROUTINE

したがって、次のコマンドを使用するとコメント行を回避できます。

awk 'BEGIN{IGNORECASE=1};/^[^#]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile

しかし、「サブルーチン」という単語の前に「WRITE」がある行も避けたいです。このコマンドを試しましたが、正常に動作しません。

awk 'BEGIN{IGNORECASE=1};/[^#|WRITE]*subroutine/{flag=1;s="tmp_s_"++i}/end subroutine/{flag=0} flag {print $0 > s}' $sourcecodefile

答え1

1つの代わりに2つの条件を使用することもできます。

... /^[^#]*subroutine/ && $0 !~ /write subroutine/ ...

関連情報