ls -a /usr | grep '^[prs]'
Würde wählen Sie aus der Ausgabe von ls -a /usr
(das ist die Liste der Dateien in /usr
, die durch Zeilenumbruchzeichen begrenzt sind) die Zeilen, die entweder mit p
, r
oderbeginnenZeichen.
Das ist wahrscheinlich, was Ihr Lehrer erwartet, aber es ist falsch oder zumindest nicht zuverlässig.
Dateinamen können aus vielen Zeilen bestehen, da das Newline-Zeichen ein gültiges Zeichen wie ein beliebiger Dateiname unter Linux oder einem anderen Unix ist. Dieser Befehl gibt also nicht die Dateien zurück, deren Name mit , q
oder s
beginnt, sondern die Zeilen der Dateinamen, die mit , q
oder s
beginnen. Im Allgemeinen können Sie die Ausgabe von ls
nicht zuverlässig nachbearbeiten.
-a
ist versteckte Dateien, das heißt Dateien, deren Name mit .
beginnt. Da Sie nur diejenigen wollen, die mit , q
oder s
beginnen, ist das überflüssig.
Beachten Sie, dass:
ls /usr | grep ^[pqs]
noch falsch wäre. Erste ^
ist ein Sonderzeichen in einigen Shells wie die Bourne-Shell, rc
, es
oder zsh -o extendedglob
(obwohl OK in bash
oder andere POSIX-Shells).
Dann, in den meisten Shells (fish
ist eine bemerkenswerte Ausnahme), [pqs]
ist ein Globbing-Operator. Das bedeutet, dass ^[qps]
durch die Shell auf die Liste der Dateien erweitert werden soll, die mit diesem Muster übereinstimmen (relativ zum aktuellen Verzeichnis).
So in diesen Schalen wie bash
, die nicht ^
speziell behandeln, wenn es eine Datei ^p
im aktuellen Verzeichnis genannt ist, die
ls /usr | grep ^p
werden wird, wenn es keine passende Datei ist, in csh
, tcsh
, zsh
oder bash -O failglob
, erhalten Sie eine Fehlermeldung und der Befehl wird abgebrochen. In zsh -o extendedglob
wo ^
ist ein Globbing-Operator, ^[pqs]
würde jede Datei außer , q
oder s
bedeuten.
Direkt unter '/ usr' oder auf irgendeiner Ebene unter'/usr'? –
nur direkt unter/usr –
'echo/usr/[prs] *' ... – twalberg