grep "etwas" anyfiles.log> afile.csv, muss den Eingabepfad und den Dateinamen nicht in die CSV-Datei drucken

9

Ich habe einige Protokolldateien, sie haben mehr als 30000 Zeilen. Ich muss den Namen "Domäne" finden und in der CSV-Datei speichern, aber nach dem Speichern wurden allen Zeilen in der CSV-Datei der Pfad und der Dateiname der Eingabedateien am Anfang der Zeile der CSV-Datei hinzugefügt. Wie kann ich vorgehen, wenn der Pfad und der Name der Eingabedatei nicht zu CSV-Dateien hinzugefügt werden müssen?

Beispiel:

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

Herzliche Grüße, bitte helfen Sie mir, wenn jemand weiß

Chaxiong
quelle

Antworten:

21

Verwenden Sie die --no-filenameOption für grep.

Unterdrücken Sie das Präfix von Dateinamen bei der Ausgabe. Dies ist die Standardeinstellung, wenn nur eine Datei (oder nur eine Standardeingabe) durchsucht werden soll.

grep --no-filename "domain" 

Referenz: Grep-Handbuch

Nemo
quelle
1

Siehe man cutfür Details, aber die kurze Antwort ist grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

Oder sehen man grepund tungrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep gibt den Dateinamen NICHT aus, wenn sich nur EINE Datei in der Befehlszeile befindet, wie grep "domain" /home/logs/any.login Ihrem Beispiel. Wenn Sie die Ausgabe von Dateinamen erzwingen möchten, reicht grep "domain" /home/logs/any.log /dev/nulldies aus.

Walzer
quelle
man cut... klingt schmerzhaft.
Matt Fletcher