grep 时输出带有行号的相邻行

grep 时输出带有行号的相邻行

有没有办法在 grep 文件内容时输出相邻行以及行号?我正在尝试获取以下形式的输出:

$ ~/myscript.sh download file # 'download' being the pattern here
121: # and downloads with wget/curl, whichever is available.
122: download_file () {
123:  if which wget &>/dev/null; then
----------
356: # Since the prerequisites are already installed, we may proceed
357: download_urls=("http://example.com/foo/bar.bz2"
358:                "http://d1.example.com/xyz/abc.tar.gz"

当然,我知道我可以使用该-n选项获取 grep 我的模式,并显示获得的行号中的一些相邻行(例如,通过使用任何方法这里),但是有更好的方法吗?

答案1

您可以使用 GNUgrep的 Context Line Control,来自man grep

-A NUM, --after-context=NUM
在匹配行之后打印 NUM 行尾随上下文。在连续的匹配组之间放置一条包含组分隔符 (--) 的行。使用 -o 或 --only-matching 选项,这不起作用并给出警告。


-B NUM, --before-context=NUM
在匹配行之前打印 NUM 行前导上下文。在连续的匹配组之间放置一条包含组分隔符 (--) 的行。使用 -o 或 --only-matching 选项,这不起作用并给出警告。

如果两侧都需要相同数量的行,则可以使用单个上下文编号:

-C NUM, -NUM, --context=NUM
打印输出上下文的 NUM 行。在连续的匹配组之间放置一条包含组分隔符 (--) 的行。使用 -o 或 --only-matching 选项,这不起作用并给出警告。

当与-n标志 ( --line-number) 结合使用时,您可以对与周围上下文的匹配进行编号。

在你的例子中:

grep -n -C1 download

相关内容