2017-05-17 7 views
0

Ich versuche, ein Muster zu schreiben, das mit jedem Dateinamen in einem Verzeichnis übereinstimmt, das enthält: eine Ziffer, unmittelbar gefolgt von einem Buchstaben 'e' oder 'h'. (Beispiel: 3e.txt)Shell Globbing - Probleme mit Wildcard-Matching

Ich bin verpflichtet, diese Muster in der Terminal/Shell zu testen. Ich habe versucht, mehrere Muster zu schreiben, aber sie sind alle nicht in der Lage, die Dateien 3e.txt und 3h.txt zu finden, die ich absichtlich in mein Arbeitsverzeichnis gestellt habe, um die Muster zu testen.

Ich bin ziemlich neu in der Shell, also bin ich mir nicht sicher, ob ich die Wildcards richtig verwende. Wie kann ich mein Muster korrigieren, damit es mit den Dateinamen übereinstimmt, nach denen ich suche?

Antwort

0

Die meisten Shells unterstützen keine regulären Ausdrücke. Sie können über die Pipeline ls in egrep für den Mustervergleich:

$ ls | egrep '[0-9][eh]'

+1

Man beachte, dass Zeichensätze ('[...] ') sind ein Teil der POSIX grundlegende Syntax für reguläre Ausdrücke, so gibt es keine Notwendigkeit, ERE zu verwenden' grep' Variante (d 'egrep'). Einfach 'Grep' wäre genug. –

0

ls nicht regex Syntax für Muster unterstützt. Sie müssen ls Ausgang zu einem gewissen regex Werkzeug umleiten, zum Beispiel grep:

ls | grep '[0-9][eh]' 

Beachten Sie das Muster, das Sie wirklich brauchen [0-9][eh] ist, die eine Ziffer von e oder h gefolgt ist.

Dies wird alle Dateien mit einer Ziffer gefolgt von e oder h sogar in der Mitte des Namens auflisten. Wenn Sie nur Dateien benötigen mit dieser Sequenz beginnen, fügen ^ zum regex:

ls | grep '^[0-9][eh]' 
0

hier ein regex ist, die Muster wie 3e.txt, 2h.txt aber nicht 3eh.txt übereinstimmen sollte.

ls | grep -P '\d[eh]\.\w{1,3}' 

Es bedeutet "eine beliebige Ziffer von einem einzigen 'e' oder 'h' mit einem .xxx Suffix suceed".

Try it on regex101

+0

Sie verwenden Perl-Syntax-Funktionen in der Regex, also sollten Sie 'grep' darauf aufmerksam machen. Verwende '-P':' ls | grep -P '\ d [eh] \. \ w {1,3}' ' –

+0

@DmitryEgorov Ich habe dem Befehl '-P' hinzugefügt. Vielen Dank! – Mistalis

Verwandte Themen