it-swarm.com.de

Dateinamen nach Dateinamenmuster und Dateiinhalt auflisten?

Wie kann ich den Grep-Befehl verwenden, um file name anhand eines Platzhalters "LMN2011*" zu suchen, in dem alle Dateien aufgeführt sind, bei denen dies als Anfang beginnt?

Ich möchte diesen Dateiinhalt noch einmal überprüfen. 

Wenn file content etwas ähnliches hat 

LMN20113456

Kann ich GREP dafür verwenden?

Grep -ls "LMN2011*"   "LMN20113456"

Wie kann ich die Dateinamen und deren Inhalt mit Shell-Befehlen richtig durchsuchen?

34
zod

Grep verwendet NICHT "Wildcards" für die Suche - das ist Shell-Globbing, wie * .jpg . Grep verwendet "reguläre Ausdrücke" für die Mustererkennung. Während in der Shell '*' "alles" bedeutet, bedeutet es in grep "null oder mehr Male" zum vorherigen Artikel.

Weitere Informationen und Beispiele hier: http://www.regular-expressions.info/reference.html

Um Ihre Frage zu beantworten, können Sie mit grep Dateien finden, die einem bestimmten Muster entsprechen:

find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011

Dann können Sie ihren Inhalt durchsuchen (Groß-/Kleinschreibung wird nicht berücksichtigt):

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'

Wenn die Pfade Leerzeichen enthalten können, sollten Sie die Funktion "Zero End" verwenden:

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'
55
jm666

Dies ist auch ohne find möglich, wenn Sie die "--include"-Option von grep verwenden.

grep-Manpage sagt:

--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).

Wenn Sie also eine rekursive Suche nach einer Zeichenfolge in einer Datei durchführen möchten, die einem bestimmten Muster entspricht, sieht dies in etwa wie folgt aus:

grep -r --include=<pattern> <string> <directory>

Um zum Beispiel in allen Makefiles rekursiv nach dem String "mytarget" zu suchen:

grep -r --include="Makefile" "mytarget" ./

Oder suchen Sie in allen Dateien, die mit "Make" in Dateiname beginnen:

grep -r --include="Make*" "mytarget" ./
24
Jahanzeb Farooq
grep LMN20113456 LMN2011*

oder wenn Sie rekursiv durch Unterverzeichnisse suchen wollen:

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

Angenommen, LMN2011*-Dateien befinden sich in /home/me, überspringen jedoch alles in /home/me/temp oder darunter:

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