grep “algo” anyfiles.log> afile.csv, não precisa imprimir o caminho de entrada e o nome do arquivo no arquivo CSV

9

Eu tenho alguns arquivos de log, eles têm mais de 30000 linhas. Preciso encontrar o nome "domínio" e salvar no arquivo CSV, mas após salvar, todas as linhas no arquivo CSV foram adicionadas ao caminho e ao nome dos arquivos de entrada no início da própria linha do arquivo CSV. Como posso fazer se não precisar que o caminho e o nome do arquivo de entrada sejam adicionados aos arquivos CSV.

Exemplo:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

Atenciosamente, por favor me ajude se alguém souber

Chaxiong
fonte

Respostas:

21

Use a --no-filenameopção para grep.

Suprima a prefixação dos nomes dos arquivos na saída. Esse é o padrão quando há apenas um arquivo (ou apenas entrada padrão) para pesquisar.

grep --no-filename "domain" 

Referência: Manual Grep

Nemo
fonte
1

Veja man cutpara detalhes, mas a resposta curta é grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

Ou veja man grepe façagrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep NÃO gera o nome do arquivo se houver apenas UM arquivo na linha de comando, como grep "domain" /home/logs/any.logno seu exemplo. Se você deseja forçar a saída de nomes de arquivos, grep "domain" /home/logs/any.log /dev/nullserá necessário.

waltinator
fonte
man cut... parece doloroso.
Matt Fletcher