2017-08-08 1 views
0

Ich brauche ein kleines Skript für eine Zeichenfolge in Protokolldateien zu suchen Datei und die Anzahl der Zeilen zählen. Da dies möglicherweise solange dauert, möchte ich auch die Ausgabe von "grep" in der Konsole anzeigen. meine Idee ist etwas wie:Bash-Skript auf der Konsole und

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

Aber es funktioniert nicht. Ich bekomme keine Ausgabe, die tmp-Datei wird erstellt, scheint aber leer zu sein.

Antwort

0

Sie haben vergessen, das Startverzeichnis fro Ihre Suche zu bieten:

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

Hier ist die Einzeiler für von usb Aufzeichnungen bekommen/var/log/messages:

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

Hoffe, dass Sie es finden usefull

+0

Ja, aber ich habe nicht die Ausgabe von grep bekommen ... – Kjellson

0

Es gibt zwei Fehler im Skript:

  • Der Weg
  • $ grep() verwendet wird, um einen Befehl auszuführen. Dies muss hinzugefügt werden, wenn Variable COUNT zuweisen

Aktualisiert Skript:

#!/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. 

Auch könnten Sie die Option -F in grep verwenden. -F steht für Feste Strings

+0

Seltsam, es nicht noch funktioniert. Wenn ich den Befehl grep ohne | Tee, alles geht gut ... – Kjellson

+0

Dies sollte im Normalfall funktionieren. Versuchen Sie es mit "finden". Butgrep ist die richtige Wahl :) Versuchen Sie den Befehl >> #find -Typ f -exec grep -IRL "System out of memory" {} \; > /tmp/checkoom.tmp –