Linux: Wie, um eine Liste aller Dateien/Verzeichnisse, die nur mithilfe von ls
Dies ist eine Frage gegeben an der Universität.
Die Frage ist: Liste alle Dateien/Verzeichnisse innerhalb testfiles
Ordner, die keine Erweiterung haben.
Die richtige Antwort ist:
ls testfiles | grep -v "\."
Nun, nur um zu verstehen, wie ls
regex funktioniert, könnte bitte jemand erklären zu mir, wie das wäre, indem Sie nur ls
? Darüber hinaus würde ich mich über jedes Beispiel, das auch verwendet das dollar-Zeichen $
zu betonen, dass insbesondere der name endet mit .[a-z]
.
Jede Hilfe wirklich dankbar.
Noch eins! Eine andere Antwort auf diese Frage ist mit:
ls testfiles | grep "^[^.]*$"
Wie ist das zu Lesen? Ich lese ^[^.]*$
wie diese:
^ -> does not contain
[^.] -> starts with a dot
* -> repeated zero or more times
$ -> till the end
Ich möchte jemanden um mich richtig auf diese...
Danke!
Ich glaube nicht, dass Sie tun können, mit nur
Dein regex-Analyse ist nicht ganz richtig, ein
You ' ve lost me at "|". Wenn die Anforderung ist "nur ls' ist, was ist dann grep machst dort?
ls
.ls
verwendet erweiterte glob-syntax, nicht regex. Werfen Sie einen Blick auf dieser für Ideen.[^.]
als regulären Ausdruck steht für ein beliebiges einzelnes Zeichen außer einen Zeitraum.Dein regex-Analyse ist nicht ganz richtig, ein
^
am start ist das start-Anker. Also das Muster ist wirklich passenden beliebige Anzahl von Zeichen, die nicht ein Punkt von Anfang bis Ende.You ' ve lost me at "|". Wenn die Anforderung ist "nur ls' ist, was ist dann grep machst dort?
InformationsquelleAutor m.spyratos | 2013-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unix-Dienstprogramme, die dazu bestimmt waren, als Filter benutzt, so ist die Antwort macht Sinn, da es am besten kommt ein real-Welt-Anwendung.
Verstehen Sie aber, dass
grep "\."
passt alles mit "Zeit" (also die Erweiterung), undgrep -v "\."
passt alles andere (also das Komplement).Es ist schwer zu machen, den Befehl, mehr präzise als das, was es bereits ist, denn wer kann sagen, was gemeint ist, eine Erweiterung, und was nicht?
Teil 2:
ls testfiles | grep "^[^.]*$"
http://unixhelp.ed.ac.uk/CGI/man-cgi?grep
So
^[^.]*$
eigentlich bedeutet:Alles beginnt und endet mit einer Reihe von Zeichen, von denen jede nicht einen Zeitraum.
Dem ersten caret-Zeichen ist nicht eine negation, bedeutet dies beginnt mit. Das zweite caret-Zeichen ist das "nicht" signifikant.
^[^.]*$
eigentlich bedeutet: Alles, was beginnt und endet, mit jedem Zeichen, das kein Zeitraum." Nein, es bedeutet etwas, dass nur nicht-Zeit-Zeichen vom Anfang bis zum Ende.Ich meinte, alles, was beginnt und endet mit einer Reihe von Zeichen, von denen ist keine Zeit... das ist eine wortreiche Art zu sagen, was Sie gesagt haben.
InformationsquelleAutor ktm5124
Korrektur:
So, es dürfen nur nicht-dot Dinge von Anfang bis Ende.
InformationsquelleAutor Charles Duffy
Könnte man es machen, mit der ignore-flag:
Hinweis - funktioniert auf CentOS 6, nicht sicher über andere Linux-Distributionen.
Sie könnte akzeptieren Sie dies als die richtige Antwort 😉
Ich könnte ja auch! Aber im Grunde war ich auf der Suche in wie konvertiert man die
grep
inls
. Das bedeutet, durch die Verwendung regulärer Ausdrücke.-I
der trick funktioniert sicher, aber ist es nicht genau das, was ich suchte. Ich denke, borries591 Antwort war die beste: "ls verwendet erweiterte glob-syntax, nicht regex". Dennoch danke...Das ist eigentlich nicht ganz richtig --
ls
nicht erkennt entweder glob-syntax oder regexes selbst, es sei denn, Sie verwenden Erweiterungen wie die-I
Flagge, die hier gegeben werden. Die shell konvertiert Einheiten in einer Liste von Dateien, bevor es überhaupt beginntls
.InformationsquelleAutor chue x
Da Sie tagged Sie die Frage mit bash, Sie brauchen nicht zu grep:
sehen http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
InformationsquelleAutor glenn jackman