awk -vN=2 'n>=N;/last pid.*/{++n}' file
我希望在第二次正则表达式匹配后打印出所有行,包括包含正则表达式的行。这很接近,但它不会打印出包含正则表达式的行。对此有任何快速帮助吗?
示例输入
last pid: something
blah
blah
last pid: something else
this
is
what
i
want
期望的输出:
last pid: something else
this
is
what
i
want
答案 0 :(得分:1)
您只需要颠倒语句的顺序:
$ awk -vN=2 '/last pid/{++n} n>=N' file
last pid: something else
this
is
what
i
want
此外,.*
中的/last pid.*/
也是多余的。匹配/last pid.*/
的所有内容都匹配/last pid/
,反之亦然。
答案 1 :(得分:1)
awk解决方案:
$ cat tst.awk
/last pid/ { p++ } # if you see a last pid, add 1 to p
p < N {next}1 # whenever p smaller than N, skip.
# else print
用以下方式调用:
awk -v N=2 -f tst.awk input.txt
给出:
$ awk -v N=2 -f tst.awk input.txt
last pid: something else
this
is
what
i
want
或oneliner:
$ awk -v N=2 '/last pid/ { p++ }p < N {next}1' input.txt