首页 > 解决方案 > 匹配所有包含 StringA 但忽略还包含 StringB 的行

问题描述

我需要匹配文件中的模式并打印以下 2 行。我为此使用 grep -A2 。但我想忽略第一个 grep 中的一些行。

我需要第一个'grep -A2'的输出来做一些进一步的处理,所以管道到 grep -v 不会帮助我,据我所知。

$cat file.txt
stringA-hurdygurdy-andmorechars
line1
line2
stringA-hurdygurdy-stringB-andmorechars
line1
line2
stringA-hurdygurdy-andmorechars
line1
line2

我需要 grep -A2 所有具有“stringA-hurdygurdy”的行,但不是包含 stringB 的行。

我正在努力 grep -A2 ^stringA.*[^stringB].* file.txt

标签: regexawkgrep

解决方案


您可以使用awk

awk '/stringA/ && !/stringB/ {n = NR+2} n >= NR' file.txt

stringA-hurdygurdy-andmorechars
line1
line2
stringA-hurdygurdy-andmorechars
line1
line2

推荐阅读