Если перед идентификатором всегда стоит тире, а после идентификатора нет тире, вы можете использовать простое раскрытие параметров. %
удаляет шаблон с конца значения, #
с начала. Удвоение символа делает его «жадным» - убирает столько, сколько может.
#! /bin/bash
files=( 'Bob Marley - I Shot The Sheriff-2XiYUYcpsT4.mp3'
'Audioslave - Be Yourself-WC5FdFlUcl0.mp3'
'Bruno Mars - Treasure [Official Music Video]-nPvuNsRccVw.mp3'
)
for file in "${files[@]}" ; do
id=${file##*-}
id=${id%.mp3}
echo "$id"
done
Для этого можно использовать uniq
, хотя стандартный формат его вывода немного отличается.
$ < in uniq -c
2 16
2 8
2 16
1 4
3 8
Предполагая, что in
— это файл, содержащий входные данные, вы получите то, что видите выше.