2016-05-25 2 views
-1

grepでエラーが発生していると思われます。このgrep文をコマンドラインのdbログに対して実行すると正常に動作します。grepで正規表現を使用したときにエラーが発生しました

grep "Query Executed in [[:digit:]]\{5\}.\?" db.log 

私はこの結果を得る:19699.188ミリ秒で実行

クエリ; "/ xyztableから*明確なを選択.....

私はスクリプト

でそれを実行すると

結果のアスタリスクは、現在のディレクトリ内のすべてのファイルのリストに置き換えられます。

echo $LONG_QUERY 

結果:

19699.188ミリ秒で実行されたクエリ。 「

はこの動作を見て誰がいますか?

+0

2番目の結果は/ xyztableから別ファイルfile2 file3を選択していたはずです....私はファイルを大括弧で入れていましたが、質問を投稿すると大括弧内のすべてが削除されたようです。 – user6381298

+2

投稿を編集して –

+0

[ファイル名の拡張子](https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)は非常に期待されています。 LONG_QUERY "。 –

答えて

2

これはgrepのではエラ​​ーではありません。これは、スクリプトがどのように解釈されるかについての理解に誤りである。

...../xyztableから明確な <list of files in current directory>を選択私はスクリプトで記述する場合

:引用符で囲まれていない、エスケープ、アスタリスクは、シェルによって解釈されているので、私はファイル名のリストを取得します

echo * 

(grepしていないが、/ binに/ bashや/ binに/ shまたはwあなたが使っているシェルを)パターン '*'と一致するファイル名に置き換える要求、つまりそれらのすべてを要求します。

私はスクリプトで記述する場合:

echo "*" 

それは引用符で囲まれた文字列にいたので、私は、シングル「*」を取得します。

私が書く場合:

STAR="*" 
echo $STAR 

変数に代入しながら、私は星を引用し、私は、コマンドの中に変数を代入するとき、それは引用符で囲まれていないとなりましたので、私は、再びファイル名を取得します。

私が書く場合:

STAR="*" 
echo "$STAR" 

二重引用符は変数展開を可能にするので、私は、シングルスターを取得します。

あなたはバッククォートを使用しています - つまり、コマンドの前後に `文字 - 。これは、コマンドの出力を変数に取り込みます。

私は、あなたがコマンドの結果をエコーすることになり、それ以外の場合は、結果をファイルにリダイレクトするだけでよいことをお勧めします。 (結局のところ、あなたのログファイルが本当にいっぱいになったため、LONG_QUERYに10,000行の出力が含まれている場合、何をするつもりですか?)

これを避けるには、少なくともecho "$LONG_QUERY"を入力してください(二重引用符で囲んでください)。