Problem mit der Verwendung von Platzhaltern, wenn ich den CP-Befehl im Terminal ausführe

Problem mit der Verwendung von Platzhaltern, wenn ich den CP-Befehl im Terminal ausführe

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 Downloadsist das Verzeichnis, aus dem ich die alphanumerische Zeichendatei in mein testVerzeichnis 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 cpBefehle 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

cpunterstützt selbst keine Platzhalter. Die Erweiterung von Platzhaltern und Mustern erfolgt bashstandardmäß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 findBefehl an:

find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'

Innerhalb von bashkö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, mdh 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

verwandte Informationen