빈 줄이 나올 때까지 검색 패턴을 따르는 줄을 삭제하세요.

빈 줄이 나올 때까지 검색 패턴을 따르는 줄을 삭제하세요.

나는 다음 코드를 사용하여 00 PROGRAM파일의 여러 블록을 성공적으로 찾고 해당 블록의 다음 줄을 모두 제거했지만 XYZ.

sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file 

이제는 그 반대가 필요합니다. Group cat다음 빈/빈 줄에 도달할 때까지 블록의 다음 줄만 찾아서 삭제하면 됩니다 . 초기 파일은 pattern파일에 보관되어야 합니다. 파일에는 빈 줄이 남아 있어야 합니다. 다른 텍스트 줄도 파일에 남아 있어야 합니다. 누구든지 이 구조가 제대로 작동하도록 변경을 제안하거나 새로운 코드 줄을 제안할 수 있습니까?

코드가 실행되기 전:

 Group cat
 Group div
 Group member1
 Group member2
 Group select
      <empty line>
Common cat
Last update

코드가 실행된 후:

Group cat
     <empty line>
Common cat
Last update

그런 다음 다음 패턴 일치를 검색하고 해당 블록의 줄을 삭제하는 등의 작업을 수행합니다.

답변1

다음은 원하는 출력을 생성합니다.

sed -e '/Group cat/,/^$/{//b' -e '/./d;}' file

첫 번째 Group cat줄 에서는 b명령이 실행되어 스크립트 끝으로 분기하고 해당 줄을 인쇄합니다(기본 동작).

명령은 다음 빈 줄까지 다른 모든 줄에서 실행되지만 d, 빈 줄 자체에서는 실행되지 않습니다.

관련 정보