删除两个图案之间的一段线

删除两个图案之间的一段线

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

相关内容