
Ich bin neu und versuche, Terminalbefehle zu lernen. Heute hatte ich ein Problem mit der cp-Platzhalterbefehlsoption. Ich habe diesen Befehl im Terminal geschrieben
cp Downloads/[:alnum:] test/
Hier Downloads
ist das Verzeichnis, aus dem ich die alphanumerische Zeichendatei in mein test
Verzeichnis kopieren möchte. Aber als ich diesen Befehl ausführte, wurde mir Folgendes angezeigt:
cannot stat ‘Downloads/[:alnum:]’: No such file or directory
Ich möchte wissen, wie ich die oben genannten Platzhalterklassen für cp
Befehle verwenden kann. Und auch, wie ich den oben genannten Platzhalterzeichenbefehl verwenden kann.
Platzhalter sind
*
?
[characters]
[!characters]
[[:classes:]]
Häufig verwendete Klassen sind
[:alnum:]-> Match any Alphanumeric Character
[:alpha:] -> Match any Alphabetic Character
[:digit:] -> Match any nummeral
[:lower:] -> Matches any lowercase letter
[:upper:] -> Matches any Uppercase letter
Wie kann ich diese Platzhalter und ihre Klassen verwenden?
Antwort1
cp
unterstützt selbst keine Platzhalter. Die Erweiterung von Platzhaltern und Mustern erfolgt bash
standardmäßig durch die Shell.
In jedem Fall sind Zeichenklassen innerhalb anzugeben []
- das schließt die []
sie bereits umgebenden aus. So etwa:
cp Downloads/[[:alnum:]] test/
Allerdings [[:alnum:]]
wird nur ein einzelnes alphanumerisches Zeichen abgeglichen. Alle Dateinamen, die nur alphanumerische Zeichen enthalten, lassen sich nicht nur mit den bereits aufgelisteten Platzhaltern abgleichen. Für eine leistungsfähigere Filterung sehen Sie sich den find
Befehl an:
find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'
Innerhalb von bash
können Sie verwendenerweiterte Globs:
shopt -s extglob
cp Downloads/*([[:alnum:]]) test/
Antwort2
[:alnum:]
entspricht tatsächlich einem einzelnen Zeichenaus dem Set :
, a
, l
, n
, u
, m
dh gegeben
$ ls
_?_ 123 7 a abc :file fi:le m
Dann
$ ls [:alnum:]
a m
Um ein einzelnes Zeichen aus der alphanumerischenKlasse [:alnum:]
es muss sein[[:alnum:]]
$ ls [[:alnum:]]
7 a m
Zum Abgleichen eines einzelnen alphanumerischen Zeichens, gefolgt von null oder mehreren beliebigen Zeichen
$ ls [[:alnum:]]*
123 7 a abc fi:le m
Zum Abgleichen von Dateien bestehend ausnurvon alphanumerischen Zeichen mittels Shell-Globbing erforderterweiterter Glob( extglob
) Syntax
$ ls +([[:alnum:]])
123 7 a abc m