Ich habe einen Ordner mit folgenden Dateien:
ondemand_kvm131_img.2
vm114_img.2
vm114_img.3
ondemand_vm205_img.3
label_ondemand_kvm131_img.1
vm117_img.1
Ich möchtenurdie "Namen" anzeigen, daher sollte die Ausgabe in diesem Fall sein
kvm131
vm114
vm114
vm205
kvm131
vm117
Wie kann das gemacht werden? Durch die Verwendung von sed? Grep? Vielen Dank im Voraus.
Antwort1
Versuche dies:
ls -1 | sed 's/_img.*//;s/.*_//'
Antwort2
Dies kann auf verschiedene Arten erfolgen, je nach der genauen Formatierung der Namen und Ihrem Vorhaben. Am einfachsten wäre wahrscheinlich Folgendes ls | sed
:
$ ls | sed 's/^\(.*_\)*\([^_]*\)_img\.[0-9]/\2/'
kvm131
kvm131
vm205
vm114
vm114
vm117
Wenn Ihre Dateinamen vernünftig sind und Sie nur ein visuelles Erscheinungsbild wünschen, ist dies in Ordnung, aber wenn Sie mehr mit den Namen machen, besteht die Möglichkeit von Fehlern bei ungewöhnlichen Dateinamen. Sie können sie einzeln wie folgt abrufen:
$ for file in *; do left=${file%_img.?}; base=${left##*_}; echo $base; done
kvm131
kvm131
vm205
vm114
vm114
vm117
Ersetzen Sie echo
durch den Befehl Ihrer Wahl. Beide können geändert werden, um dem Format besser zu entsprechen, wenn Sie insgesamt ein anderes Format haben.