![두 가지 가능한 패턴으로 시작하는 줄을 무시합니다.](https://linux55.com/image/115660/%EB%91%90%20%EA%B0%80%EC%A7%80%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%ED%8C%A8%ED%84%B4%EC%9C%BC%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EC%A4%84%EC%9D%84%20%EB%AC%B4%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
소스코드를 분석해서 각각 다른 함수나 서브루틴을 파일로 출력하려고 합니다. 내 질문은 소스 코드가 다음과 같을 수 있다는 것입니다.
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/ ...