Bashスクリプト - 特定の文字列を含む行を見つける方法

Bashスクリプト - 特定の文字列を含む行を見つける方法

私は、特定のディレクトリとそのサブディレクトリにあるファイルと、特定の拡張子を持つファイルでのみ、私が提供した単語を含む行を見つけるスクリプト(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"

おすすめ記事