可能的重复:
仅显示 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'