Grepコマンドを使用して、ワイルドカードfile name
に基づいて"LMN2011*"
を検索し、これを先頭としてすべてのファイルをリストするにはどうすればよいですか?
それらのファイルの内容に別のチェックを追加したいと思います。
file content
のようなものがある場合
LMN20113456
これにGREP
を使用できますか?
Grep -ls "LMN2011*" "LMN20113456"
シェルコマンドを使用してファイル名とその内容を検索する適切な方法は何ですか?
Grepは、検索に「ワイルドカード」を使用しません。これは、*。jpgのようなシェルグロビングです。 Grepは、パターンマッチングに「正規表現」を使用します。シェルでは「*」は「何でも」を意味しますが、grepでは「前のアイテムに0回以上一致する」ことを意味します。
詳細と例はこちら: http://www.regular-expressions.info/reference.html
あなたの質問に答えるために-あなたはgrepであるパターンにマッチするファイルを見つけることができます:
find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011
その後、コンテンツを検索できます(大文字と小文字を区別しません):
find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'
パスにスペースを含めることができる場合は、「ゼロエンド」機能を使用する必要があります。
find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'
Grepの"--include"
オプションを使用すると、find
なしでも実行できます。
grepのmanページのコメント:
--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
したがって、特定のパターンに一致するファイル内の文字列を再帰的に検索するには、次のようになります。
grep -r --include=<pattern> <string> <directory>
たとえば、すべてのMakefileで文字列「mytarget」を再帰的に検索するには:
grep -r --include="Makefile" "mytarget" ./
または、ファイル名に「Make」で始まるすべてのファイルを検索するには:
grep -r --include="Make*" "mytarget" ./
grep LMN20113456 LMN2011*
または、サブディレクトリを再帰的に検索する場合:
find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
find/folder -type f -mtime -90 | grep -E "(.txt | .php | .inc | .root | .gif)" | xargs ls -l> WWWlastActivity.log
LMN2011*
ファイルは/home/me
内にあるが、/home/me/temp
以下のすべてをスキップすると仮定します。
find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'