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.