2016-08-01 12 views
0

--include引数を使用してgrepコマンド(bashスクリプト内)、検索するファイル拡張子に渡します。 これらのファイル拡張子は、ユーザーがコマンドラインから引数として入力します(4番目の引数はファイル拡張子をカンマで区切って保持します)。 bashスクリプト内でgrepコマンドを使用して--include引数に変数値を渡します。

この

は私のスクリプトです:

... 
comando="egrep -irn . --include="\\*.{${4}}" --exclude=\*.{class} -e "${3}"" 
echo $comando 
resultado=eval $comando 
echo $resultado 

(comandoをエコーするとき、私はこれを取得:egrepの私もコマンドで文字列を作成し、このように、evalを呼び出してみました

... 
echo "Searching in ${4} files for pattern" 
egrep -irn . --include=\*.{"${4}"} --exclude=\*.{class} -e "${3}" 
... 

--include = *。{wsdl、xml} --exclude = *。{class} -e textoこれはまさにコマンドラインで実行された場合、いくつかのマッチを返すコマンドである)

私はまた、すべてを含む引数を指定して変数を渡してみました:

... 
argumento="\\*.{${4}}" 
egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" 
... 

これは、スクリプトは、コマンドラインから呼び出される方法です。

SH ./searchRecursiveIterativeEgrep.shを/ tmp /テスト/別/の/ usr/local/aux/"texto" wsdl、xml

どのようにこれを達成するためのアイデアですか? ありがとう

+1

ファイルを見つけるためのUNIXツールは、適切に 'grep'ではなく' find'という名前です。あなたがGNU grepsのオプションを見たのは忘れてしまったのですが、それらを追加することはひどい考えです(出力をソートするためのgrepオプションは何ですか?)だけで、ファイルを見つけるためには 'find'を、** G **はローバーリー検索ファイル内の** R ** egular ** E ** xpressionおよび** P ** rint用の一致するテキスト。あなたの人生ははるかに簡単になります。 –

+0

ファイル内に正規表現を見つけようとしているので、grepが必要です。コマンドは期待どおりに動作しますが、コマンドラインからの引数では動作させることはできません。 –

+0

a)grepはファイル内の正規表現を見つけることのできる唯一のツールではありません。b)grepを使ってファイル内の正規表現を見つけることはお勧めできません。grepを使用しないでくださいファイルが間違ったアプローチであり、あなたのgrepコマンドをばかげて複雑にしています。 'find'を使ってファイルを探し、' grep'(または他のツール)を使って 'find'が見つけたファイル内の正規表現を探します。 'findの行に沿った何か。 -name '* .extension' -print0 | xargs -0 grep 'regexp' '。 –

答えて

0

私はちょうどあなたが問題を抱えていることを理解していました。生成されたコマンドをコピー/ペーストすると動作しますが、シェル内では動作しません。

は、だから私はこの問題を回避する

argumento="\\*.{${4}}" 
echo egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" | sh 

として(新しいシェルにエコーをパイプそれをしない:それが動作する)ことを提案します。たぶんそれは最高の答えではないが、それは仕事をする。

誰かがそれを説明することができますか、より良い、よりクリーンな答えで出てくるかもしれません。

+0

このコマンドは、複数の拡張子を持つコマンドラインで動作します。 egrep-aln。 --include = \ *。{wsdl、xml} --exclude = \ *。{class} -e texto –

0

あなたはので、これは明らかにテストされていないが、適切なアプローチがファイルやgrepにGがlobally R egular Eを検索FIND findを使用することです任意のサンプル入力または予想される出力を提供していませんでしたファイル内のxpressionとP rint一致するテキスト(名前のヒントを参照してください;-))。次のようなものがあります。

find . -type f -name "*.$4" -print0 | xargs -0 grep -Ein "$3" 

詳細については、man find、xargs、およびgrepを参照してください。

関連する問題