私はgrep
コマンドライン検索を使用することに慣れており、他の検索結果を使用して正常に検索する方法を知りたいです。
私の試みは次のとおりです。結果から「ツール」を探しています。
grep tool | grep -rl embed=
これにより一部の結果が返され、コンソールが中断されます。シンプルでエレガントなソリューションはありますか?
ベストアンサー1
管路左から右に走ります。より正確には、プロセス並列に実行されますが、データ左から右への流れ:左コマンドの出力が右コマンドの入力になります。
ここで左のコマンドはですgrep tool
。単一の引数をに渡すので、grep
標準入力を検索します。標準入力をリダイレクトしていないので、grep
端末から読み込んでいます。端末はユーザーが入力するのを待っています。
ファイル内で検索するには、次のようにします。
grep tool path/to/file | …
ディレクトリから再帰的に検索するには、次のようにします。
grep -r tool path/to/directory | …
結果をフィルタリングして、含まれている行のみを一覧表示できますembed=
。削除-l
と-r
オプションは、入力が標準入力から来る場合は意味がありません。
grep -r tool path/to/directory | grep 'embed='
tool
これにより、 と を含む行がembed=
順序に関係なく表示されます。別の単純なパイプライン方法は、ORパターンを使用して単一の検索を実行することです。これは常に可能ですが、パターンが重なっている場合はパターンが非常に複雑になる可能性があります(ここではそうではありません)。
grep -E -r 'tool.*embed=|embed=.*tool' path/to/directory
リストしたい場合文書含まれているtool
他embed=
のコマンド構造が必要です。最初のコマンドgrep
はファイル名(-l
)をリストし、2番目のコマンドはこれらのファイル名を次のように受け取ります。議論、入力として使用されません。標準入力をコマンドライン引数に変換xargs
コマンドは次のとおりです。
grep -lZ -r tool path/to/directory | xargs -0 grep -l 'embed='