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

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

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

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? Заранее спасибо.

решение1

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

ls -1 | sed 's/_img.*//;s/.*_//'

решение2

Есть несколько способов сделать это, в зависимости от точного форматирования имен и того, что вы планируете с ними делать. Самым простым, вероятно, будет 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на команду по вашему выбору. Оба варианта можно изменить, чтобы они лучше соответствовали формату, если у вас другой формат в целом.

Связанный контент