grep -A1 'blah' logfile

多亏了这个命令,每一行都有'blah',我得到了包含'blah'的行输出和日志文件中的下一行。这可能是一个简单的,但我找不到一种方法来省略一行有'blah',只显示下一行在输出。


当前回答

看来你用错工具了。Grep并没有那么复杂,我认为你想要提升awk作为这项工作的工具:

Awk '/blah/ {getline;打印$0}的日志文件

如果你有任何问题让我知道,我认为它很值得学习一点awk,它是一个伟大的工具:)

附注:这个例子并没有获得“无用使用猫奖”;) http://porkmail.org/era/unix/award.html

其他回答

看来你用错工具了。Grep并没有那么复杂,我认为你想要提升awk作为这项工作的工具:

Awk '/blah/ {getline;打印$0}的日志文件

如果你有任何问题让我知道,我认为它很值得学习一点awk,它是一个伟大的工具:)

附注:这个例子并没有获得“无用使用猫奖”;) http://porkmail.org/era/unix/award.html

您可以尝试使用awk:

awk '/blah/{getline; print}' logfile

滚边是你的朋友……

使用grep -A1显示匹配后的下一行,然后将结果管道到tail,只抓取一行,

cat logs/info.log | grep "term" -A1 | tail -n 1

如果下一行从来没有包含'blah',你可以过滤他们:

grep -A1 blah logfile | grep -v blah

使用cat logfile |…不需要。

使用grep可以输出行号(-n)。通过<num>:和<num>-,匹配和下一行之间的输出是不同的:

# grep -A1 -n '230 Login successful."$' /var/log/vsftpd.log
1:Sat Nov  5 03:29:43 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "230 Login successful."
2-Sat Nov  5 03:29:43 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "221 Goodbye."
3:Sat Nov  5 04:44:41 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "230 Login successful."
4-Sat Nov  5 04:44:42 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "221 Goodbye."

这样我们就可以过滤输出,只得到每个匹配的下一行:

# grep -A1 -n '230 Login successful."$' /var/log/vsftpd.log | grep -E "^[0-9]+-" | cut -d"-" -f2-
Sat Nov  5 03:29:43 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "221 Goodbye."
Sat Nov  5 04:44:42 2022 [pid 10] [foo] FTP response: Client "10.1.1.1", "221 Goodbye."