Mit grep und ls -ein-Befehle
Mit einem ls –a
und grep
, wie würden Sie eine Liste der Namen aller Dateien in /usr beginnend mit den Buchstaben p oder den Buchstaben " r "oder die Buchstaben" s "mit einem einzigen Befehl "grep"?
wäre das richtig?
ls –a | grep [prs] /usr
Direkt unter
nur direkt unter /usr
/usr
oder auf jeder Ebene unter /usr
?nur direkt unter /usr
echo /usr/[prs]*
...InformationsquelleAutor Nicole Romain | 2015-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden, wenn Sie versuchen, Dateien zu finden, verwenden Sie nicht
ls
. Verwenden Sie diefind
Befehl.Wenn Sie nicht möchten, suchen Sie den gesamten Baum unterhalb von /usr, dies zu tun:
InformationsquelleAutor Andy Lester
Wählen Sie aus der Ausgabe von
ls -a /usr
(das ist die Liste der Dateien in/usr
getrennt durch newline-Zeichen) die Zeilen, die beginnen, die von denp
,r
oders
Zeichen.Das ist wahrscheinlich das, was dein Lehrer erwartet, aber es ist falsch oder zumindest nicht zuverlässig.
Dateinamen können aus vielen Linien, da das newline-Zeichen gilt ein Charakter als alle in einem Dateinamen unter Linux oder unix. So, Kommando zurück nicht die Dateien, deren name beginnt mit
p
,q
oders
, aber die Zeilen die Dateinamen beginnen mitp
,q
oders
. In der Regel können Sie nicht post-Prozess die Ausgabe vonls
zuverlässig.-a
ist, um versteckte Dateien, d.h. Dateien, deren name beginnt mit.
. Da wollen Sie nur diejenigen, die beginnen mitp
,q
oders
, das ist überflüssig.Beachten Sie, dass:
wäre noch falscher. Erste
^
ist ein spezielles Zeichen in ein paar shells wie die Bourne-shell,rc
,es
oderzsh -o extendedglob
(obwohl OK inbash
oder anderen POSIX-shells).Dann, in den meisten shells (
fish
wird eine Bemerkenswerte Ausnahme),[pqs]
ist ein globbing-operator. Das bedeutet, dass^[qps]
soll erweitert werden, indem Sie die shell, um die Liste der Dateien, die auf übereinstimmung mit diesem Muster (relativ zum aktuellen Verzeichnis).So, in diesen Muscheln wie
bash
dass nicht behandeln^
speziell, wenn es eine Datei namens^p
im aktuellen Verzeichnis, wird es zuWenn es keine passende Datei, in
csh
,tcsh
,zsh
oderbash -O failglob
haben, erhalten Sie eine Fehlermeldung und der Befehl wird abgebrochen. Inzsh -o extendedglob
wo^
ist ein globbing-operator^[pqs]
würde bedeuten, eine Datei aberp
,q
oders
.InformationsquelleAutor Stephane Chazelas
Den Kommentar von @twalberg ist perfekt für die Optionen, die Sie fragte.
Das echo ignoriert ausgeblendete Dateien, aber diese werden gefiltert, wenn Sie möchten, dass nur Dateien beginnend mit [prs].
Wenn Sie möchten, um versteckte Dateien für andere Filter, die eine ähnliche Lösung wäre
ls -ad /usr/[prs]*
, wo die -d-option unterdrückt die Auflistung der Unterverzeichnisse.Diese Lösung wird auch zeigen Sie den vollständigen Pfad ein, dies kann unterdrückt werden, wenn Sie gehen, um dir erste. Wenn Sie möchten, bleiben Sie in Ihrem aktuellen Verzeichnis, verwenden Sie eine subshell. Ich benutze && für das überspringen der ls, wenn der /usr dir nicht vorhanden ist.
InformationsquelleAutor Walter A
Ich würde
ls
das Verzeichnis, und nur dann gelten diegrep
. Auch, Sie fehlt der^
Charakter heraus zu filtern und nur die Dateien, die start mit diesen Buchstaben:InformationsquelleAutor Mureinik
Warum nicht einfach
/usr
und nicht nur/usr
selbst.Das ist leicht repariert mit einem
-maxdepth
argument. Es ist sicherlich viel sicherer als Analysels
.InformationsquelleAutor Mithrandir