定期的に作業する必要があるログの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
して呼び出すと、実際には単一-E
のgrep
引数を受け取りますが、-i -E
これは実際には無効です。
以下を行う必要があります。
function mygrep () {
grep "$@" /path/to/logs/my.log
}
Writeは正しいことをします。各引数を単一の単語に正しく拡張することを除いて、"$@"
同様です。$*