grepを使用して、現在のディレクトリで文字列「hello」を含むすべてのファイルを検索し、.hファイルと.ccファイルのみを表示するにはどうすればよいですか。
grepを使用して、現在のディレクトリで文字列「hello」を含むすべてのファイルを検索し、.hファイルと.ccファイルのみを表示するにはどうすればよいですか。
回答:
grep -r --include=*.{cc,h} "hello" .
これは、この.
(現在の)ディレクトリで "hello"を含むすべての.cc OR .hファイルを(すべてのサブディレクトリでも)再帰的に検索します。
ファイル名を指定したり、stdinを使用したりする代わりに、ワイルドカードを渡すことができます。
grep hello *.h *.cc
-R
残念ながら追加は機能しません。*
再帰的に行く前に展開します。
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
。
マニュアルページをチェックfind
してxargs
詳細を。
-print0
後に'*.cc'
そうでなければ、検索のその部分のためのアクションを持っていないよう。または、そこに括弧を挿入する必要がありますfind . \( -name '*.cc' -or -name '*.h' \) -print0
。
find -exec +
xargsの代わりに構文を使用することもできます
-exec grep "hello" {} +
中括弧のペアはファイル名を表します。良い提案。
再帰的な検索が必要な場合は、さまざまなオプションがあります。あなたは考慮すべきack
です。
それが失敗した場合、GNU find
を使用していてxargs
:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
を使用/dev/null
すると、ファイル名が印刷されます。-print0
そして-0
スペース(改行など)を含むファイル名を扱います。
わかりにくい名前(スペースなど)がない場合は、以下を使用できます。
find . -name '*.*[ch]' -print | xargs grep hello /dev/null
これは、パターンマッチがファジィ(しかし単純)であるため、意図しないいくつかの名前を取得する可能性がありますが、それ以外の場合は機能します。また、find
およびの非GNUバージョンで動作しxargs
ます。
find ... -exec grep "hello" {} +
grep -l hello **/*.{h,cc}
shopt -s nullglob
.hファイルまたは.ccファイルがない場合は、エラーメッセージを回避したい場合があります。
最も簡単な方法:grep -Ril "Your text" /
grep -si "hello" --include=*.{cc,h} ./* ./.*
(隠しファイルも検索する)です。以下は、すべてのファイルまたは非表示のファイルで文字列を検索するための一般的なバージョンですgrep -s "hello" * .*
。たぶん、最も一般的に便利な(そして最も単純な)「こんにちは」のために、この検索すべての非隠されたファイル:grep -si "hello" ./*
この投稿への感謝:askubuntu.com/a/777456