Tenho uma pasta com os seguintes arquivos:
ondemand_kvm131_img.2
vm114_img.2
vm114_img.3
ondemand_vm205_img.3
label_ondemand_kvm131_img.1
vm117_img.1
Eu gostaria deapenasexibir os "nomes", então neste caso a saída deve ser
kvm131
vm114
vm114
vm205
kvm131
vm117
Como isso pode ser feito? Usando sed? Grep? Desde já, obrigado.
Responder1
Experimente isto:
ls -1 | sed 's/_img.*//;s/.*_//'
Responder2
Existem várias maneiras de fazer isso, dependendo da formatação precisa dos nomes e do que você planeja fazer com eles. O mais simples provavelmente seria ls | sed
:
$ ls | sed 's/^\(.*_\)*\([^_]*\)_img\.[0-9]/\2/'
kvm131
kvm131
vm205
vm114
vm114
vm117
Se os nomes dos seus arquivos forem sensatos e você quiser apenas uma aparência visual, tudo bem, mas se você estiver fazendo mais com os nomes, há possibilidade de erros em nomes de arquivos estranhos. Você pode obtê-los individualmente assim:
$ for file in *; do left=${file%_img.?}; base=${left##*_}; echo $base; done
kvm131
kvm131
vm205
vm114
vm114
vm117
Substitua o echo
pelo comando de sua escolha. Ambos podem ser alterados para corresponder melhor ao formato, se você tiver um formato geral diferente.