Папка поиска, отображающая только определенные слова

0

У меня есть папка со следующими файлами:

ondemand_kvm131_img.2
vm114_img.2
vm114_img.3
ondemand_vm205_img.3
label_ondemand_kvm131_img.1
vm117_img.1

Я хотел бы отображать только «имена», поэтому в этом случае вывод должен быть

kvm131
vm114
vm114
vm205
kvm131
vm117

Как это может быть сделано? Используя sed? Grep? Заранее спасибо.

Devator
источник

Ответы:

1

Попробуй это:

ls -1 | sed 's/_img.*//;s/.*_//'
Николь Гамильтон
источник
3

Это можно сделать несколькими способами, в зависимости от точного форматирования имен и того, что вы планируете с этим делать. Наиболее простым, вероятно, будет ls | sed:

$ ls | sed 's/^\(.*_\)*\([^_]*\)_img\.[0-9]/\2/'
kvm131
kvm131
vm205
vm114
vm114
vm117

Если ваши имена файлов нормальны, и вы просто хотите визуально выглядеть, это будет хорошо, но если вы делаете больше с именами, есть вероятность ошибок в нечетных именах файлов. Вы можете получить их индивидуально так:

$ for file in *; do left=${file%_img.?}; base=${left##*_}; echo $base; done 
kvm131
kvm131
vm205
vm114
vm114
vm117

Замените на echoвашу команду выбора. Оба из них могут быть изменены, чтобы соответствовать формату более близко, если у вас есть другой формат в целом.

Kevin
источник