共通ログを使用したgrep機能の簡素化

共通ログを使用したgrep機能の簡素化

定期的に作業する必要があるログのgrep操作を単純化する関数を作成しようとしています。

パイプで拡張正規表現を使用し、出力などをリダイレクトしたいと思います。

ただし、標準を使用してこれを行うのに問題があります。グレブパターンファイル関数の構文。

今設定した方法はひどいようですが、作業は完了です。

alias mygrep='cat /path/to/logs/my.log | grep'

これにより、問題なく次のコマンドを実行できます。

mygrep -i -E "WARN|java" |less

正しい実装は次のとおりです。

function mygrep () {
    args=$*
    grep "$args" /path/to/logs/my.log
}

ただし、上記の検索パラメータとパイプパラメータでこれを使用すると、grepは無効なオプション間違い。

私は何を見逃していますか?

答え1

次のコードが引用されます$args

grep "$args" /path/to/logs/my.log

これを行うには、変数の合計値を単一の引数としてgrepに渡す必要があります。したがって、mygrep引数を使用-iして呼び出すと、実際には単一-Egrep引数を受け取りますが、-i -Eこれは実際には無効です。

以下を行う必要があります。

function mygrep () {
    grep "$@" /path/to/logs/my.log
}

Writeは正しいことをします。各引数を単一の単語に正しく拡張することを除いて、"$@"同様です。$*

関連情報