grep "quelque chose" anyfiles.log> afile.csv, pas besoin d'imprimer le chemin d'entrée et le nom du fichier dans un fichier CSV

9

J'ai quelques fichiers journaux, ils ont plus de 30000 lignes. J'ai besoin de trouver le nom "domaine" et d'enregistrer dans le fichier CSV mais après l'enregistrement, toutes les lignes du fichier CSV ont été ajoutées le chemin et le nom de fichier des fichiers d'entrée au début de la ligne même du fichier CSV. Comment puis-je faire si je n'ai pas besoin que le chemin et le nom du fichier d'entrée soient ajoutés aux fichiers CSV.

Exemple:

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

Cordialement, aidez-moi s'il vous plaît quelqu'un

Chaxiong
la source

Réponses:

21

Utilisez l' --no-filenameoption pour grep.

Supprimez le préfixe des noms de fichiers en sortie. Il s'agit de la valeur par défaut lorsqu'il n'y a qu'un seul fichier (ou une seule entrée standard) à rechercher.

grep --no-filename "domain" 

Référence: Grep Manual

Nemo
la source
1

Voir man cutpour plus de détails, mais la réponse courte est grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv.

Ou voir man grepet fairegrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep ne génère PAS le nom de fichier s'il n'y a qu'un seul fichier sur la ligne de commande, comme grep "domain" /home/logs/any.logdans votre exemple. Si vous souhaitez forcer la sortie des noms de fichiers, grep "domain" /home/logs/any.log /dev/nullfera l'affaire.

waltinator
la source
man cut... semble douloureux.
Matt Fletcher