是否可以将 grep -C 或 -A 或 -B 与排除匹配行的内容结合起来

是否可以将 grep -C 或 -A 或 -B 与排除匹配行的内容结合起来

因此,使用 grep 我们可以使用 -A 来获取匹配“之后”的行,我们可以使用 -B 来获取匹配“之前”的行。我们还可以使用 -C 来获取之前和之后的行。

我有一些这样的数据

boring data
boring data
boring data
interesting value
MARK
boring data
boring data
boring data
interesting value
MARK

我希望获得这样的输出:

interesting value
interesting value

使用选项 -BI 得到:

# cat somefile | grep -B 1 MARK

interesting value
MARK
interesting value
MARK

我想完全排除 MARK 行。

答案1

grep您可以在-v第一个之后添加一个逆grep

$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value

我添加了--no-group-separator省略匹配之间的分隔线的功能。

答案2

如果您不习惯使用grep,那么您可以使用其他工具,例如 awk。

awk '/MARK/ { print saved_line }
     { saved_line=$0 }'

它表示如果该行匹配则打印保存的行,并在每一行上保存它以备再次需要。

相关内容