Primeiro, você parece estar entendendo mal o que a -h flag faz.
-h suprimirá o (s) nome (s) dos arquivos transmitidos na linha de comando (ou seja, mp3sCIR.txt - embora quando apenas um único arquivo for fornecido, o nome não seja impresso por padrão) - ele não será removido qualquer coisa dos nomes dos arquivos dentro do arquivo.
Em segundo lugar, você está confundindo padrões de shell (também conhecidos como 'globs') e expressões regulares - o grep usa a sintaxe de regex, portanto, para corresponder nomes de arquivos com a extensão .mp3 você precisaria 1
grep ".*\.mp3" mp3sCIR.txt
(que deve funcionar da mesma forma com ou sem o -E , pois as formas básica e estendida são idênticas).
Para remover os componentes principais do nome do caminho (por exemplo, o que você estava tentando fazer com -h ), você poderia usar
grep -o "[^/]*\.mp3" mp3sCIR.txt
para imprimir o apenas a parte correspondente que não inclui separadores de caminho, ou com o modo grep in perl compatível (PCRE)
grep -Po ".*/\K.*\.mp3" mp3sCIR.txt
Para referência futura, você pode ter salvo os nomes sem os componentes de caminho principal usando o formato de saída find -printf '%f\n' .
[1] Na verdade, parece que enquanto o BRE trata um * no início de um padrão como literal, ERE (isto é, egrep / grep -E ) parece tratá-lo como um quantificador para uma expressão vazia ( "zero ou mais instâncias de nada"; portanto, grep -E "*.mp3" faz corresponder às entradas com o sufixo .mp3 - mas não pelo motivo que você provavelmente pensaria.