![Mehrere Strings aus mehreren Dateien ausgeben](https://rvso.com/image/38681/Mehrere%20Strings%20aus%20mehreren%20Dateien%20ausgeben.png)
Hallo, mein aktueller Code ist:
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -l basename
if [ $? -eq 0 ]; then
tday="$(date +'%d.%m.%Y')"
echo "ERROR found on $tday in the files obove!"
else
tday="$(date +'%d.%m.%Y')"
echo "No ERROR was found at the $tday !"
fi
Der Code gibt derzeit die Logdateien aus, die an diesem Tag erstellt oder bearbeitet wurden (nicht die der letzten 24 Stunden) und sucht, ob die Logdateien „ERROR“ enthalten und sagt einfach, in welchen Logdateien ein Fehler ist, oder wenn kein Fehler vorliegt, sagt er das auch.
Ich habe die Namen ein wenig zensiert, also denken Sie nicht, dass ich es vermasselt habe und es deshalb nicht funktioniert ;-)
Ausgabe (Beispiel):
gBatch_2070.log
gBatch_2071.log
ERROR found on 25.06.2014 in the files obove!
Der Ordner sieht folgendermaßen aus:
Jede Datei sieht folgendermaßen aus:
Meine gewünschte Ausgabe:
Name der Datei + "ERROR" + die Meldung nach dem Fehler
Beispiel:
gBatch_2067.log – FEHLER **.batch.BatchStart = Batchverarbeitung beendet, gBatch_2077.log – FEHLER **.batch.BatchStart = Batchverarbeitung beendet, ...
Vielen Dank im Voraus für Ihre Hilfe!
Antwort1
Das sollte sein, wonach Sie suchen:
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*" -daystart -mtime -1 \
-exec grep -H "ERROR" {} \; | sed -e 's/.*\/gBatch_/gBatch_/g' -e 's/:[^E]*/: /g' | tr '\n' ', '
Beispielausgabe:
gBatch_2070.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
gBatch_2070.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
gBatch_2071.log:ERROR **.batch.BatchStart = Batchverarbeitung beeendet, gBatch_2077.log - ERROR **.batch.BatchStart = Batchverarbeitung beeendet
...
Erläuterung:
-H
zwingt grep, auch den Dateinamen auszudruckensed 's/.*\/gBatch_/gBatch_/g'
Machen Sie den Dateinamen zum Basisdateinamen
Antwort2
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gBatch_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -l basename\
> /tmp/files_found
if [ $? -eq 0 ]; then
tday="$(date +'%d.%m.%Y')"
while read line
do
error=`grep "ERROR" /home/user/logfilesError/$line`
error=`echo $error | sed 's/^.*ERROR/ERROR/' | tr '\n' ', '`
echo "$line - $error"
done < /tmp/files_found
echo "ERROR found on $tday in the files obove!"
rm /tmp/files_found
else
tday="$(date +'%d.%m.%Y')"
echo "No ERROR was found at the $tday !"
fi