
有沒有辦法在 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