因此,使用 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 }'
它表示如果该行匹配则打印保存的行,并在每一行上保存它以备再次需要。