Com base nos comentários de Valentin B e mueh, eu descartei sed
para a análise no script e, em vez disso, usei a manipulação de string do bash. Enquanto sed
era bom para analisar vários dados e ordená-los em um único comando, a expansão de comando para usar o resultado dividiria a saída em "palavras" que seriam delimitadas por espaços, mesmo que os espaços fossem precedidos por barras invertidas ou cercado por citações.
Então, em vez de tentar construir todos os argumentos para id3v2
em uma única passagem com sed
, ele foi dividido em parsing do número da faixa e do título separadamente usando a manipulação de string do bash. O resultado final:
for track in *.mp3 ; do
track_num=${track%_-_*}
title=${track#*_} ; title=${title%.mp3} ; title=${title//_/ }
id3v2 -t "${title}" -T ${track_num} ${track}
done
Obrigado a mueh por explicar exatamente por que minha abordagem na questão não estava funcionando, e Valentin B por introduzir a manipulação de string do bash.