Seu script sed
, como está, sempre imprimirá a primeira linha, independentemente de ter sido modificada. A ação padrão para sed
é imprimir seu espaço de padrão (linha de entrada atual 1 ) como padrão após a aplicação de todos os outros comandos.
Então, basicamente, o que você está mandando fazer é aplicar algumas substituições e depois sair. Isso significa que ele tentará suas substituições na primeira linha e as imprimirá após as substituições (independentemente de terem sido bem-sucedidas), já que essa é a ação padrão. Em seguida, ele encontra q
e sai completamente do processamento.
Se você quiser suprimir a ação de impressão padrão, precisará da opção -n
, mas precisará instruir explicitamente sed
a imprimir as linhas em que a substituição foi bem-sucedida:
sed -n 's/REM[ \t]*GENRE[ \t]*"\(.*\)"//p;q' your_file_here
Agora, este script imprimirá a primeira linha em que a substituição foi bem-sucedida e, em seguida, sairá.
Note que você não precisa de duas substituições, apenas uma é suficiente.
Nota lateral não relacionada
Não há necessidade de
cat your_file | grep 'foobar'
quando
grep 'foobar' your_file
faria.
1 Nem sempre a linha de entrada atual: você pode, por exemplo, adicionar linhas ao espaço padrão.