忽略以两种可能模式开头的行

忽略以两种可能模式开头的行

我正在尝试分析源代码并将每个不同的函数或子例程输出到文件中。我的问题是源代码可能是这样的:

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

也许使用两个条件而不是一个:

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

相关内容