Pasta de pesquisa exibindo apenas determinadas palavras

Pasta de pesquisa exibindo apenas determinadas palavras

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 echopelo comando de sua escolha. Ambos podem ser alterados para corresponder melhor ao formato, se você tiver um formato geral diferente.

informação relacionada