변경 로그와 유사한 다음 파일이 있습니다
#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