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

相關內容