web-dev-qa-db-ja.com

ファイル名のパターンとファイルの内容に基づいてファイル名をリストしますか?

Grepコマンドを使用して、ワイルドカードfile nameに基づいて"LMN2011*"を検索し、これを先頭としてすべてのファイルをリストするにはどうすればよいですか?

それらのファイルの内容に別のチェックを追加したいと思います。

file contentのようなものがある場合

LMN20113456

これにGREPを使用できますか?

Grep -ls "LMN2011*"   "LMN20113456"

シェルコマンドを使用してファイル名とその内容を検索する適切な方法は何ですか?

37
zod

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'
60
jm666

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" ./
27
Jahanzeb Farooq
grep LMN20113456 LMN2011*

または、サブディレクトリを再帰的に検索する場合:

find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;
7
Aoife

find/folder -type f -mtime -90 | grep -E "(.txt | .php | .inc | .root | .gif)" | xargs ls -l> WWWlastActivity.log

0
ugnelakys

LMN2011*ファイルは/home/me内にあるが、/home/me/temp以下のすべてをスキップすると仮定します。

find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'
0
ohho