是否有可能以某种方式结合
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