行番号とともに隣接する行を出力する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

grep以下では、GNUの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

おすすめ記事