![AWK는 첫 번째 일치 후에 줄을 삽입하거나 다음 줄이 패턴이 아닌 경우 빈 줄을 삽입합니다.](https://linux55.com/image/187418/AWK%EB%8A%94%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%9D%BC%EC%B9%98%20%ED%9B%84%EC%97%90%20%EC%A4%84%EC%9D%84%20%EC%82%BD%EC%9E%85%ED%95%98%EA%B1%B0%EB%82%98%20%EB%8B%A4%EC%9D%8C%20%EC%A4%84%EC%9D%B4%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%EC%95%84%EB%8B%8C%20%EA%B2%BD%EC%9A%B0%20%EB%B9%88%20%EC%A4%84%EC%9D%84%20%EC%82%BD%EC%9E%85%ED%95%A9%EB%8B%88%EB%8B%A4..png)
변경 로그와 유사한 다음 파일이 있습니다
#1.2.3
#InsertPart
#1.2.2
또는
#1.2.3
#InsertPart
- something
#1.2.2
원하는 출력은
#1.2.3
#InsertPart
- new inserted line
#1.2.2
또는
#1.2.3
#InsertPart
- new inserted line
- something
#1.2.2
다음 스크립트를 사용하여 #InsertPart 뒤에 행을 삽입할 수 있습니다.
awk '1;!inserted && /# InsertPart/{c=2}c && !--c{print "- new inserted line"; inserted=1}'
#x.x.x
하지만 나는 패턴이 다음 행에 있을 때만 빈 행을 삽입해야 한다고 주장합니다. 그래서 나는 다음과 같은 결과를 얻습니다.
#1.2.3
#InsertPart
- new inserted line
#1.2.2
답변1
내 생각에 문제는 라인을 먼저 인쇄한 다음 삽입을 수행한 다음 라인을 인쇄하는 대신 다른 작업을 수행하기로 결정한다는 것입니다.
매직 태그 뒤에 새 내용을 2줄 삽입하고, 줄이 로 시작하는 경우에는 사이에 빈 줄도 추가하고 싶습니다 #
.
awk '/#InsertPart/ { c = 3 }
--c == 0 { print "- new inserted line" }
c == 0 && /^#/ { print "" }
{print $0}'
더 명확하게 하기 위해 가장 짧은 방법(예: "1" 대신 "{print $0}") 대신 직접적인 방법으로 코드를 작성했습니다. c를 감소시키고 --c == 0
c의 새 값을 0과 비교합니다.
답변2
이 시도
awk -v line='- new inserted line' '/#InsertPart/ {printf "%s\n\n%s\n", $0, line; next}; 1' yourfilename