Carpeta de búsqueda que solo muestra ciertas palabras

Carpeta de búsqueda que solo muestra ciertas palabras

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 echocon el comando de su elección. Ambos pueden modificarse para que coincidan mejor con el formato, si tiene un formato diferente en general.

información relacionada