grep -r "bananas" | cut -d: -f1 | xargs cat >> result.txt
grep
-
-r
: recursivo. Leia todos os arquivos em cada diretório, recursivamente,
Resultado: file_name:text
para cada linha. Por exemplo, foo.txt:bananas
.
Agora precisamos buscar o nome do arquivo de cada linha.
corte
Editor simples para remover parte da linha (você pode usar sed
ou awk
aqui, mas o corte é simples)
-
-d
delimiter. Já que temos:
depois do arquivo este é nosso delimitador:-d:
-
-f
dividimos nossa saída em campos. Qual deles pegar?-f1
- primeiro um!
xargs
Agora temos uma lista de arquivos. Isso a ver com eles? Usamos xargs
que constrói e executa linhas de comando a partir da entrada padrão. Ele aceita o nome do arquivo no stdin e executa cat
para cada linha, fornecendo o nome do arquivo como parâmetro. E cat
simplesmente imprime seu conteúdo para stdout.
>>
significa "anexar ao arquivo"