특정 일치 후 빈 줄을 모두 제거하는 방법

특정 일치 후 빈 줄을 모두 제거하는 방법

내가 원하는 것은 특정 일치 항목이나 일치 항목 자체 이후의 모든 빈 줄을 제거하는 것입니다.

원본 파일:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE]


 [TITLE 2]
 line 2
 line 3

 [GROUP 2]

 random text...

원하는 결과:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE 2]
 line 2
 line 3

 random text...

답변1

단순한sed해결책:

sed -z 's/\[[^]]*\]\n\n\n*//g' file
  • -z- 입력을 줄 바꿈 문자 대신 0바이트(ASCII "NUL" 문자)로 끝나는 줄 집합으로 처리합니다.

또는 더 복잡하다해결책:

awk '/\[.+\]/{ r=$0; rn=NR; c=0; next }rn && NR-rn==++c{ 
         if(NF) { if(NR-ern!=1) print r; rn=0 } else { ern=NR; next } 
    }1' file

산출:

line 1
random words

[GROUP 1]
example 1
example 2
example 3

[TITLE 2]
line 2
line 3

random text...

관련 정보