Tengo una carpeta con los siguientes archivos:
ondemand_kvm131_img.2
vm114_img.2
vm114_img.3
ondemand_vm205_img.3
label_ondemand_kvm131_img.1
vm117_img.1
Me gustaríasolomostrar los "nombres", por lo que en este caso la salida debe ser
kvm131
vm114
vm114
vm205
kvm131
vm117
¿Cómo se puede hacer esto? ¿Usando sed? ¿Grep? Gracias de antemano.
Respuesta1
Prueba esto:
ls -1 | sed 's/_img.*//;s/.*_//'
Respuesta2
Hay varias formas de hacerlo, dependiendo del formato preciso de los nombres y de lo que planee hacer con ellos. El más simple probablemente sería ls | sed
:
$ ls | sed 's/^\(.*_\)*\([^_]*\)_img\.[0-9]/\2/'
kvm131
kvm131
vm205
vm114
vm114
vm117
Si los nombres de sus archivos son correctos y solo desea una apariencia visual, esto funcionará bien, pero si está haciendo más con los nombres, existe la posibilidad de que se produzcan errores en nombres de archivos impares. Puedes conseguirlos individualmente así:
$ for file in *; do left=${file%_img.?}; base=${left##*_}; echo $base; done
kvm131
kvm131
vm205
vm114
vm114
vm117
Reemplace el echo
con el comando de su elección. Ambos pueden modificarse para que coincidan mejor con el formato, si tiene un formato diferente en general.