2017-08-08 5 views
0

J'ai besoin d'un petit script pour rechercher une chaîne dans les fichiers journaux et compter le nombre de lignes. Comme cela peut prendre du temps, je veux aussi que la sortie de "grep" apparaisse dans la console. mon idée est quelque chose comme:Script Bash Sortie vers la console et le fichier

grep -irl "System out of memory" | tee /tmp/checkoom.tmp 
COUNT=(cat /tmp/checkoom.tmp |wc -l) 
echo $COUNT logs found. 

Mais ça ne marche pas. Je n'ai pas de sortie, le fichier tmp est créé mais semble vide.

Répondre

0

Vous avez oublié de fournir le répertoire de départ fro votre recherche:

grep -irl "System out of memory" <somewhere> | tee /tmp/checkoom.tmp 
0

Voici une doublure pour obtenir des enregistrements usb/var/log/messages:

echo "$(grep -i '/lib/udev/usb' /var/log/messages > ~/yourFile ; cat ~/yourFile | wc -l) logs found" 

espère que vous trouverez USEFULL

+0

Oui mais je ne reçois pas la sortie de grep ... – Kjellson

0

Il y a deux erreurs dans le script:

  • Le chemin d'accès au grep
  • $() est utilisé pour exécuter une commande. Ceci doit être ajouté lors de l'attribution de variable COUNT

script mis à jour:

#!/bin/bash 
grep -irl "System out of memory" <path to search> | tee /tmp/checkoom.tmp 
COUNT=$(cat /tmp/checkoom.tmp | wc -l) 
echo "$COUNT" logs found. 

Vous pouvez également utiliser l'option -F dans grep. -F est synonyme de Fixed Strings

+0

Etrange, ça ne marche toujours pas. Si j'utilise la commande grep sans | tee, tout va bien ... – Kjellson

+0

Cela devrait fonctionner normalement. Essayez d'utiliser "trouver". Butgrep est la bonne option :) Essayez d'utiliser la commande >> #find -type f -exec grep -irl "System out of memory" {} \; > /tmp/checkoom.tmp –