Algo como o seguinte deve funcionar:
find . -name "*.cfg" -print0 | xargs -0 grep -E '^([^#].*|)good'
Note que mudei para -print0
para evitar problemas com nomes de arquivos
contendo espaço em branco.
Em seguida, eu filtro linhas contendo good
, mas não começando com #
em um
regexp único. A alternativa à esquerda ( [^#].*
) corresponde às linhas que
comece com um caractere que não seja #
, em que a alternativa correta (vazia)
permite linhas de correspondência que começam com good
.
Usar um único regexp, em vez de dois como na sua pergunta, nos permite
para deixar nomes de arquivos de impressão GNU grep (o que fará se mais de um
arquivo é fornecido por find
). Adicionando grep -v ^...
em um segundo passo
não corresponderia ao início das linhas do arquivo.