📅  最后修改于: 2023-12-03 15:09:02.865000             🧑  作者: Mango
在 Shell-Bash 中,grep 是一个非常常用的文本搜索工具,它可以从文件中找到符合特定模式的行。但是,有时我们需要查找特定模式之前的行。本文将介绍如何在模式之前 grep 行的方法,并提供示例代码。
使用 grep -B 参数可以将符合特定模式的行和其前面的一些行一起输出。我们可以结合 head 命令取出前面的行数。
以下代码会输出符合 "error" 模式的行及其前面的 5 行:
grep -B 5 "error" log.txt | head -n 6
其中,-B 参数指定了前面的行数,head -n 6 取出了前 6 行。
如果不想输出符合特定模式的行,只想输出其前面的行,则可以使用 tac 和 sed 命令。tac 命令会翻转文件的内容,然后输出。我们可以结合 grep 和 tac 命令查找匹配行的行号。
以下代码会输出查找匹配 "error" 的行及其行号,然后结合 sed 命令输出其前面的 5 行:
grep -n "error" log.txt | tac | sed -n '2,6p' | tac
其中,-n 参数指定输出行号,tac 命令翻转文件内容,sed -n '2,6p' 输出第二行到第六行,最后的 tac 命令再将输出结果翻转回来。
本文介绍了两种在模式之前 grep 行的方法,并提供了相应的示例代码。在实际使用中,可以根据具体情况选择合适的方式。