grep -A1 'blah' logfile
多亏了这个命令,每一行都有'blah',我得到了包含'blah'的行输出和日志文件中的下一行。这可能是一个简单的,但我找不到一种方法来省略一行有'blah',只显示下一行在输出。
grep -A1 'blah' logfile
多亏了这个命令,每一行都有'blah',我得到了包含'blah'的行输出和日志文件中的下一行。这可能是一个简单的,但我找不到一种方法来省略一行有'blah',只显示下一行在输出。
当前回答
滚边是你的朋友……
使用grep -A1显示匹配后的下一行,然后将结果管道到tail,只抓取一行,
cat logs/info.log | grep "term" -A1 | tail -n 1
其他回答
grep /Pattern/ | tail -n 2 | head -n
尾先2个,头最后一个,比赛结束后正好排在第一行。
你可以匹配多行,然后输出n行:
awk 'c&&!--c;/match1/{c=1};/match2/{c=2}' file
匹配多个项目,输出n行后:
#!/bin/sh
[ -z $3 ] && echo $0 file \[match n\]+... \# to output line n after match && exit
f=$1; shift; while [ \! -z $2 ]; do s="$s/$1/{c=$2};"; shift; shift; done
awk 'c&&!--c;'$s $f
所以你可以把上面的文件保存为match .sh和chmod +x match .sh,然后如果你有一个这样的文件:
line1
line2
line3
line4
line5
line6
line7
并运行:
./matchn.sh file line1 1 line3 2 line6 1
你会得到:
line2
line5
line7
这将需要更多的调整来支持0偏移量。
滚边是你的朋友……
使用grep -A1显示匹配后的下一行,然后将结果管道到tail,只抓取一行,
cat logs/info.log | grep "term" -A1 | tail -n 1
如果下一行从来没有包含'blah',你可以过滤他们:
grep -A1 blah logfile | grep -v blah
使用cat logfile |…不需要。
如果你想坚持使用grep:
grep -A1 'blah' logfile | grep -v "blah"
或者使用sed:
sed -n '/blah/{n;p;}' logfile