두 패턴 사이의 선 삭제 [중복]

두 패턴 사이의 선 삭제 [중복]

중복 가능성:
일치하는 패턴 2개 사이의 텍스트만 표시

Bash 스크립트에서 sed포함된(또는 포함하지 않은) 콘텐츠로 시작하고 끝나는 줄 블록을 제거하려면 어떻게 해야 합니까?-pattern a--pattern b--pattern c--pattern c-

그래서:

line 1 -pattern a-  
line 2   
line 3 -pattern b-  
line 4 -pattern a-   
line 5 -pattern c-  
line 6 -pattern b-

이 예에서는 4, 5, 6행(또는 포함되지 않은 1, 2, 3행)을 삭제하려고 합니다 -pattern c-.

답변1

항상 세 개의 연속 행이 있다고 가정하면 다음을 사용할 수 있습니다.

# Print with pattern c
awk 'NR % 3 !=0 {printf $0;printf "|"} NR % 3 ==0 {printf $0; print " "}' file.txt | grep "\-pattern\ c\-" | sed 's/|/\n/g'

# Print without pattern c
awk 'NR % 3 !=0 {printf $0;printf "|"} NR % 3 ==0 {printf $0; print " "}' file.txt | grep -v "\-pattern\ c\-" | sed 's/|/\n/g'

관련 정보