ls Mustervergleich

7

Ich weiß, dass []das beim lsPattern Matching funktioniert :

$ ls
foo.c  foo.h
$ ls foo.[ch]
foo.c  foo.h

aber ich kann nicht finden, wo dies dokumentiert ist.

Ich würde gerne wissen, welche Syntax diesen entspricht:

$ ls
foo.asd  foo.qwe

Dies ist die beste Vermutung, die ich hatte : ls foo.[{asd}{qwe}]. Es hat nicht funktioniert.

Gauthier
quelle
4
Es ist nicht "Pattern Matching" von, lssondern "Shell Globbing"; Weitere Informationen finden Sie in der Shell-Dokumentation. lsbekommt nur zu sehen, was die Shell erweitert.
Janis

Antworten:

10

Ich denke, Sie suchen nach der Klammererweiterung {asd,qwe}:

$ ls foo.{asd,qwe}
foo.asd  foo.qwe
heemayl
quelle
Das habe ich gesucht. @ Janis Kommentar half mir, Dokumentation zu finden, zB hier: linux.die.net/Linux-CLI/x11655.htm
Gauthier
Beachten Sie, dass dies kein Mustervergleich ist, sondern eine Klammererweiterung. Selbst wenn es für diesen speziellen Fall funktioniert, können Sie keine beliebigen Muster damit abgleichen.
Janis
@ Janis: Ich denke, OP sucht tatsächlich danach, die Beispiele auf der Frage legen dies auch nahe. Wahrscheinlich konnte er / sie die Abfrage nicht genug klären. Siehe OPs Kommentar oben.
heemayl
@heemayl; wie gesagt, es scheint für seine Bedürfnisse zu genügen. Aber in seiner Frage sprach er klar über "Pattern Matching" und "die Syntax, die passen würde".
Janis
Entsprechend: linux.die.net/Linux-CLI/x11655.htm gilt diese Klammererweiterung als Standard-Platzhalter oder Globbing-Muster. Ich bin mir nicht sicher, wie sich "Pattern Matching" von "Globbing Pattern" unterscheidet. Seltsamerweise man 7 globbeschreibt []aber nicht {}.
Gauthier
2

Das Globbing-Muster wäre ls foo.@(asd|qwe). Das funktioniert

  • out of the box in ksh;
  • in bash auch wenn "erweitertes globbing" mit aktiviert ist shopt -s extglob;
  • in zsh, wenn ksh-artige Globs mit aktiviert sind setopt ksh_glob.
Janis
quelle
1
Link zu Bash Extended Globbing
Peter.O