Sie brauchen keine Rohrleitungen grepoder ls. Verwenden Sie einfach Shell Globbing.
In bash, extglobMuster 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-zund 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 lsund grep:
ls | grep -E '^file1[[:alpha:]]{,2}$'
Beispiel:
% ls | grep -E '^file1[[:alpha:]]{,2}$'
file1
file1a
file1ab
file1Ab
file1as
lsundgrepund Rohrleitungen zu erledigen ?