AWK는 첫 번째 일치 후에 줄을 삽입하거나 다음 줄이 패턴이 아닌 경우 빈 줄을 삽입합니다.

AWK는 첫 번째 일치 후에 줄을 삽입하거나 다음 줄이 패턴이 아닌 경우 빈 줄을 삽입합니다.

변경 로그와 유사한 다음 파일이 있습니다

#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 == 0c의 새 값을 0과 비교합니다.

답변2

이 시도

awk -v line='- new inserted line' '/#InsertPart/ {printf "%s\n\n%s\n", $0, line; next}; 1' yourfilename

관련 정보