중복 가능성:
일치하는 패턴 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'