Sie brauchen keine Rohrleitungen grep
oder ls
. Verwenden Sie einfach Shell Globbing.
In bash
, extglob
Muster verwenden (sollte in interaktiven Sitzungen standardmäßig aktiviert sein, wenn nicht shopt -s extglob
, um es zuerst festzulegen):
file1@(|?|??)
?
stimmt mit einem einzelnen Zeichen überein und @(||)
wählt eines der durch getrennten Muster aus |
.
Wenn Sie nur Zeichen zwischen a-z
und abgleichen möchten A-Z
, verwenden Sie die Zeichenklasse, [:alpha:]
die alle alphabetischen Zeichen im aktuellen Gebietsschema angibt:
file1@(|[[:alpha:]]|[[:alpha:]][[:alpha:]])
Beispiel:
$ ls -1
file1
file112
file11a
file12A2
file1a
file1ab
file1Ab
file1as
file2
fileadb
$ ls -1 file1@(|[[:alpha:]]|[[:alpha:]][[:alpha:]]))
file1
file1a
file1ab
file1Ab
file1as
zsh
unterstützt dies nativ:
file1(|[[:alpha:]]|[[:alpha:]][[:alpha:]])
Ich beantworte diesen Teil sehr ungern auf Anfrage von OP.
Jeder zukünftige Leser, nicht analysieren ls
, Globbing verwenden.
Verwenden von ls
und grep
:
ls | grep -E '^file1[[:alpha:]]{,2}$'
Beispiel:
% ls | grep -E '^file1[[:alpha:]]{,2}$'
file1
file1a
file1ab
file1Ab
file1as
ls
undgrep
und Rohrleitungen zu erledigen ?