2017-01-15 5 views
0

Also muß ich jede Datei in dem Verzeichnis/etc finden, die mit a, b oder c beginnenSuche Dateien im Verzeichnis regex und grep

, was ich habe, ist: grep -l '/^[a-cA-C].*/g' /etc/* obwohl ich halte jede Datei in dem Einstiegs-/usw. Verzeichnis.

ich grep -l nutze jede Datei zu erhalten (Ich denke, mit find oder grep spielt keine Rolle

'/^[a-cA-C].*/g' alles zu finden, die mit a, b oder c Groß beginnt oder Klein von null oder mehr Zeichen, gefolgt mit einer Endung globale Suche so stoppt es nicht nach dem ersten Spiel

ich weiß, dass der Regex richtige Sache ist, ich es mit einem regex-checker online eingecheckt habe

EDIT: die Lösung gefunden -> ls/etc./[a-cA-C] *

+0

Sie die ‚ls‘ Befehl verwenden lieber als ‚grep‘, Dateien in einem Verzeichnis zu finden. Der 'ls'-Befehl akzeptiert keine reguläre Ausdrücke von grep, sondern benötigt Argumente dafür, dass die Shell ihr eigenes "pattern-matching" verwendet, um zu einer Dateiliste zu expandieren - siehe http://wiki.bash-hackers.org/syntax/pattern beispielsweise. EDIT: Hoppla, tut mir leid - meintest du Dateien, deren Inhalt mit 'a', 'b' oder 'c' beginnt? – racraman

+0

Ich meine, wenn es eine Datei im Verzeichnis/etc gibt, deren Namen mit a, b oder c beginnen. Zum Beispiel apple.txt muss es zurückgeben, aber wenn es eine Datei namens windows.txt gibt, sollte sie die windows Datei nicht zurückgeben. – ThomasP

+0

Großartig - dann gilt mein ursprünglicher Kommentar, also benutze den 'ls'-Befehl mit den Mustern in diesem Link :) – racraman

Antwort

0

Hier mein Beispiel:

find ./ -type f -exec basename {} \; | grep -Ei '^(a|b|c)' 

Es rekursiv suchen und alle Dateien finden, aber nur zurück basename der Datei in der Ausgabe, ist es für Sie in Ordnung?

0

Sie können versuchen, diese ein:

find | grep '^\./[abc]'