具有多个条件的 Grep 命令

具有多个条件的 Grep 命令

是否有可能以某种方式结合

egrep 'version:|hostname:' File.log

egrep -A1 'error' File.log

合而为一egrep,这样他们就会同时被处决吗?

先感谢您!

答案1

如果我理解正确,您想要打印包含version:hostname:或 的所有行error,以及匹配行之后的一行error

使用 grep 无法做到这一点,但可以在 AWK 中相对简单地做到这一点。在这里,该p变量充当要打印的行计数器,其他变量只是在匹配模式后打印:

% cat foo.txt
hostname: foo
version: 1.2.3
blah
error:
   some error description
bleh
blih
% awk '/version:|hostname:/ {print; next} p {p--; print; next} /error/ {p=1; print} ' foo.txt
hostname: foo
version: 1.2.3
error:
   some error description

与 不同的是grep -A1,上面的内容不会触发从已经位于“下一行”的匹配中打印下一行。为此,我们必须稍微重新安排一下条件:

% awk '/error/ {p=2} p {p--; print; next} /version:|hostname:/ {print}' foo.txt
hostname: foo
version: 1.2.3
error:
   some error description
bleh

相关内容