![grep 时输出带有行号的相邻行](https://linux22.com/image/35930/grep%20%E6%97%B6%E8%BE%93%E5%87%BA%E5%B8%A6%E6%9C%89%E8%A1%8C%E5%8F%B7%E7%9A%84%E7%9B%B8%E9%82%BB%E8%A1%8C.png)
有没有办法在 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