私は、特定のディレクトリとそのサブディレクトリにあるファイルと、特定の拡張子を持つファイルでのみ、私が提供した単語を含む行を見つけるスクリプト(script1.shと仮定)を作成しようとしています。したがって、./script1.sh python py this.is.what.i.look.for
次のような結果が出なければなりません。
python/abc/file1.py:11: this.is.what.i.look.for and the line can contain other things as well
python/file2.py:412: this.is.what.i.look.for this.toggleButton.getElement())
grep -rを使用してサブディレクトリから検索しようとしましたが、これらの行を見つけました。
grep -r -e $3 $1
この行を提供しますが、ファイル拡張子が他のファイルを消去できず、コードに$ 2を含める方法が見つかりませんでした。途中で行番号も入れませんでした。私は出力を次のように2つの部分に分割しようとしましたが、再結合するpython/abc/file1.py:
this.is.what.i.look.for and the line can contain other things as well
ことawk -F " " '{print $1}
はできませんでした。 grep関数の出力部分を変数に割り当ててから再結合したいのですが、やはり失敗します。t1="grep -r -e $3 $1 | awk -F " " '{print $1}'"
どの値を使用すべきかわからないので、 ""、''、$() を使用して値を割り当ててみましたが、そのうち何も機能しません。
ベストアンサー1
少なくともGNUでは、(and)を使用してシェルスタイルのglob式を使用して、再帰的なgrepで一致を制限grep
できます。--include
--exclude
grep -r --include='*.py' -e pattern dir
-n
数字を追加または追加できます--line-number
。最後に、位置パラメータを引用することを忘れないでください。
grep -nr --include="*.$2" -e "$3" "$1"