grep "algo" anyfiles.log> afile.csv, no es necesario imprimir la ruta de entrada y el nombre del archivo al archivo CSV

9

Tengo algunos archivos de registro, tienen más de 30000 líneas. Necesito encontrar el nombre "dominio" y guardarlo en el archivo CSV, pero después de guardar, cualquier línea en el archivo CSV ha agregado la ruta y el nombre del archivo de entrada al comienzo de la línea del archivo CSV. ¿Cómo puedo hacer si no necesito agregar la ruta y el nombre del archivo de entrada a los archivos CSV?

Ejemplo:

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

Saludos cordiales, por favor ayudenme si alguien sabe

Chaxiong
fuente

Respuestas:

21

Use la --no-filenameopción para grep.

Suprima el prefijo de nombres de archivo en la salida. Este es el valor predeterminado cuando solo hay un archivo (o solo entrada estándar) para buscar.

grep --no-filename "domain" 

Referencia: Manual Grep

Nemo
fuente
1

Ver man cutpara más detalles, pero la respuesta corta es grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

O ver man grepy hacergrep -o "domain" /home/logs/*.log >newfile.csv

PD: grep NO genera el nombre de archivo si solo hay UN archivo en la línea de comando, como grep "domain" /home/logs/any.logen su ejemplo. Si desea forzar la salida de los nombres de archivo, grep "domain" /home/logs/any.log /dev/nullhará el truco.

Waltinator
fuente
man cut... suena doloroso.
Matt Fletcher