Grepエイリアス - 行番号(パイプラインにない場合)

Grepエイリアス - 行番号(パイプラインにない場合)

行番号を追加するためにgrepのbashエイリアスを作成したいと思います。

alias grep='grep -n'

もちろん、これによりパイプラインのライン数も増えます。ほとんどの場合(例外なし)、パイプ内に行番号があることを望まない(少なくとも内部的には最後の行であれば問題ありません)、sed / awk / cutパイプを追加したくありません。取り出してください。

たぶん私の要件は、「grepが行の唯一のコマンドである場合にのみ行番号を追加する」ように単純化できます。特に見苦しいニックネームを要求せずにこれを行う方法はありますか?

ベストアンサー1

bash(またはすべてのPOSIXシェル)では、次のように関数を使用できます。

grep() { 
    if [ -t 1 ] && [ -t 0 ]; then 
        command grep -n "$@"
    else 
        command grep "$@"
    fi
}

この[ -t 1 ]セクションでは[コマンドを使用します。(また〜として知られているteststdoutがttyに関連付けられていることを確認してください。

また、次の場合は[ -t 0 ]行番号のみを追加するように指定したので、標準入力も確認してください。grepただパイプラインのコマンド。

おすすめ記事