Liste nur bestimmte Dateien in einem Verzeichnis entsprechen dem Wort BOZO und endet entweder mit " 123 "oder " 456'
Ich versuche, herauszufinden, wie man eine Liste der Dateinamen für eine Datei mit dem Namen BOZO aber Ende mit NUR 123 ODER 456.
Dateien sind:
BOZO12389,
BOZOand3
BOZOand456
BOZOand5
BOZOhello123
Also der Befehl sollte nur anzeigen 'BOZOhello123' und 'BOZOand456'
Ich kann ' T es herausfinden. Ich habe versucht, alle Formen von LS und GREP, die ich mir denken kann. Das lustige an der Sache ist, wir haben versucht, es zu tun in der Klasse für etwa 10min, und niemand konnte es (einschließlich der Lehrer).
- Ich kann nicht glauben, dass der Lehrer nicht in der Lage sein, dies zu lösen, so lange.
- Danke Jungs! Verbringen wir nicht viel Zeit auf Sie, aber aus irgendeinem Grund, den ich sofort denken, 'grep' und alle anderen, die es versuchen mit 'ls'. Es war daher die 1. Frage auf die Hausaufgaben für die Nacht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich Folgendes und es funktionierte
Verwendung von shell-globs:
/bin/sh
.Reguläre Ausdrücke verwenden, um Ihnen zu helfen. Der Befehl
egrep
sollte helfen, denn es erlaubt die Verwendung von regulären Ausdrücken.Du suchst die Dateien von der Art BOZO456 und BOZO123
Einen Zeitraum
.
ist eine wilde Karte, so dass Sie Ersatz für<anything>
. Die*
lassen Sie es wiederholen 0 oder mehr Male. Durch Platzierung von rund 123 und 456 Runden Klammern, Sie simulieren ein ODER.So, du willst, dass jeder Charakter wiederholt 0 oder mehrmals, gefolgt von 123 oder 456.
Beispiel:
egrep "BOZO.*(456|123)" data
Danke an Nathan Fellman für die Hilfe und Bearbeitungen.
.
ist Häufig die wildcard, und*
bedeutet "0-mal oder mehr", so wird dies mit "BOZ456', 'BOZOOOOOOOO123' etc...BOZOa456
undBOZOx123
aber nichtBOZOOO123
oder sogarBOZO123
. Was Sie brauchen, ist `"BOZO.*(456/123)"data
- Datei? Vielleicht haben Sie vergessenls > data
vor, dass das Kommando? Könnte man das nicht in einem Befehl alsls |egrep "BOZO.*(456|123)"
aber das würde auch passen, BOZO1234. Hinzufügen eines$
am Ende der regex zu beheben.Könnten Sie auch finden Befehl :
find . -maxdepth 1 -name "BOZO*123" -o -name "BOZO*456"
(in diesem Fall die Klammern sind nicht notwendig).Dieser sollte nicht so schwer sein. Die meisten naive Weg ist, um
ls
Verzeichnis und dann ist grep für Sie nur, was Sie wollen: