
$ ls
abcmkde
ghemkde
vdecdde
Beispielsweise möchte ich nur Dateinamen mit dem 4. und 5. Zeichen mit nur einer Iteration einer einzelnen Übereinstimmung auflisten ( mk
und cd
im obigen Beispiel).
Es gibt eine Reihe von Dateien mit unterschiedlichen Namen und unterschiedlichen vierten und fünften Buchstaben.
Antwort1
Wenden Sie die Unix-Philosophie an: ein Werkzeug für jeden Job und die Shell, um sie miteinander zu kombinieren. Es gibt drei Jobs:
Listen Sie die Dateinamen auf. Sofern Ihre Dateinamen keine nicht druckbaren Zeichen oder Steuerzeichen enthalten, ist es in diesem Fall
ls
sinnvoll, die Ausgabe zu analysieren. Wenn Sie nur bestimmte Dateien auflisten möchten, können Sie etwas wieprintf '%s\n' *.ext
um einen Namen pro Zeile aufzulisten.
Extrahieren Sie den Teil des Dateinamens, der Sie interessiert. Um das 4. und 5. Zeichen zu extrahieren, können Sie
cut -b 4,5
(für Einzelbyte-Zeichen) odercut -c 4,5
(um Mehrbyte-Zeichen zuzulassen) verwenden.Entfernen Sie Duplikate. Der einfachste Weg, dies zu tun, ist
sort -u
(dadurch werden die Teile auch sortiert).
RohreProgramme zusammenführen. Das Ergebnis ist
ls | cut -b 4,5 | sort -u
Antwort2
Mit ksh93
oder :bash
zsh
mksh
for file in *; do
printf '%s\n' "${file:3:2}"
done | sort -u