J'ai un ensemble de fichiers journaux à réviser et j'aimerais rechercher des chaînes spécifiques dans les mêmes fichiers à la fois. Est-ce possible? J'utilise actuellement
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Comment utiliser ceci et rechercher les chaînes de plusieurs fichiers à la fois? Si c'est quelque chose qui doit être scripté, quelqu'un peut-il fournir un script simple pour le faire?
grep
peut prendre plus d'un argument de fichier.Réponses:
la source
grep
sauter des répertoires tout en vérifiant tous les fichiers de manière récursive?grep -E 'text' **/*
fonctionne, mais donne un message d'erreur pour chaque sous-répertoire (puis vérifie correctement tous les fichiers qu'il contient)find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
Vous pouvez utiliser quelque chose comme ceci:
Cela trouvera tous les fichiers avec
.log
comme extension et appliquera lagrep
commande.la source
xargs
et la possibilité de casse grave sur les espaces blancs dans les noms de fichiers quand vous pouvez simplement utiliserfind . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?Si c'est plus simple, vous pouvez simplement spécifier chaque fichier l'un après l'autre.
la source
Si vous avez besoin de grep sur un ensemble arbitraire de noms de fichiers qui ne peuvent pas être récupérés par une expression régulière:
Quel est l'avantage de coller les noms de fichiers les uns après les autres? Vous pouvez compiler la liste des noms de fichiers sur un fichier texte, puis le coller.
la source
Si vous souhaitez effectuer une recherche récursive dans les fichiers de sous-répertoires également, vous pouvez utiliser la commande ci-dessous.
Il va rechercher récursivement dans les fichiers de sous-répertoires également
la source
Ce fut une tâche très fastidieuse. Et oui, il était certainement nécessaire de créer un script si vous voulez rechercher plusieurs chaînes dans plusieurs journaux différents en même temps. Mais j'ai récemment dû faire cela et c'était très douloureux. Néanmoins, il est prêt et prêt à être téléchargé à partir du lien suivant:
Log Search Script Télécharger
La façon dont cela fonctionne est assez simple.
Scénario 1: Surveillez UNE chaîne dans un seul fichier journal
Scénario 2: Surveillez plusieurs chaînes dans un seul fichier journal
Scénario 3: Surveiller les chaînes simples / multiples dans plusieurs fichiers journaux
Remarques:
Le _P_ signifie OU - Il remplace le tuyau "|" symbole car il est moins probable que vous deviez rechercher une chaîne contenant "_P_". Si vous ne souhaitez pas taper "_P_", vous pouvez simplement remplacer le _P_ par "|".
Lorsque vous utilisez ce script, les paramètres que vous allez modifier fréquemment sont les suivants:
En utilisant '-ndfoundmul', vous obtiendrez une sortie similaire à:
Solution au problème de l'affiche originale: rechercher plusieurs chaînes dans plusieurs fichiers journaux
OS: Ceci a été testé sur Ubuntu et Red Hat
la source
Cela cherchera «fatale ou erreur ou critique ou échec ou avertissement ou chaîne de recherche» dans les fichiers dont le nom commence par «log_file? et extension 'lo ' * dans le chemin / chemin / vers / le / fichier / et donnez à la chaîne de recherche une couleur aléatoire et le numéro de ligne où il a été trouvé.
la source
grep
compétences, alors bonne chance dans votre carrière USE!-E
et-F
ne peuvent pas être utilisés en même temps, ils sont en conflit (typo?).La réponse de JigarGandhi démontre l'utilisation du caractère générique astérisque. Il y en a plus et vous pouvez les voir ici ou en courant
man 7 glob
.L’un d’eux que j’ai trouvé utile est la plage de correspondance
[]
. Étant donné que le système sur lequel je travaille produit des fichiers journaux numérotés de manière séquentielleproduct.log.1
product.log.2
...
product.log.200
, par exemple , il est pratique de grep avec une seule commande sur 3 ou 4 fichiers séquentiels, mais pas davantage. Donc çagrep 'whatever' product.log.[5-7]
grep pour tous les fichiers se terminant par product.log. 5, 6 ou 7. Le caractère générique n'est pas nécessaire pour être à la fin, donc la réponse de scintillement peut être simplifiée
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Notez également que ces caractères génériques peuvent être utilisés dans d'autres commandes, comme
cp
par exemple.la source
Vous pouvez également utiliser des accolades si les fichiers se trouvent tous dans le même dossier.
Voir un exemple
Si vous ajoutez un s au grep, cela supprime les erreurs concernant les fichiers manquants.
J'essayais de le faire moi-même pour faire des commandes qui fonctionnent sur plusieurs distributions où il est dans un fichier par rapport à l'autre en raison de différences de système d'exploitation.
Journaux de courrier
Journaux de courrier archivés utilisant 2> / dev / null pour supprimer zgrep des avertissements .gz manquants
Référence: Y a - t-il un moyen de faire référence à plusieurs fichiers dans un répertoire sans retaper tout le chemin?
la source