如何在每个 grep 匹配之后显示行,直到其他特定匹配?

如何在每个 grep 匹配之后显示行,直到其他特定匹配?

我知道通过使用"-A NUM"开关我可以在每次匹配后打印特定数量的尾随行。我只是想知道是否可以打印尾随行,直到每次匹配后找到特定单词为止。例如,当我搜索“Word A”时,我想查看包含“Word A”的行以及其后的行,直到包含“Word D”的行。

语境:

Word A
Word B
Word C
Word D
Word E
Word F

命令:

grep -A10 'Word A'

我需要这个输出:

Word A
Word B
Word C
Word D

答案1

看来您想打印 ' Word A' 和 ' Word D' (包含)之间的行。我建议您使用sed而不是grep.它允许您编辑一系列以您想要的模式开始和结束的输入流。您应该只告诉sed打印范围内的所有行而不打印其他行:

sed -n -e '/Word A/,/Word D/ p' file

答案2

为什么不使用 awk ?

awk '/Word A/,/Word D/' filename

答案3

perl -lne 'print if /Word A/ .. /Word D/' file

或者

cat file | perl -lne 'print if /Word A/ .. /Word D/'

相关内容