Bestimmtes Datum von einem file auslesen - Linux
Hallo zusammen,
ich möchte mir in Linux aus der /var/log/messages Dateiinhalte der letzten 24 Stunden anzeigen lassen, alles was davor in die Datei geschrieben wurde möchte ich nicht sehen.
Beispiel:
ich habe eine Datei in der steht
Aug 24 09:41:54 hier steht text 1
Aug 26 13:06:08 hier steht text 2
Sep 2 03:04:26 hier steht text 3
Sep 2 03:04:33 hier steht text 4
Sep 2 03:08:41 hier steht text 5
Sep 2 12:41:43 hier steht text 6
Sep 2 12:43:33 hier steht text 7
Ich benötige jedoch nur die Dateiinhalte der letzten 24 Stunden, also dass man mit date das aktuelle Datum ausliest und sich dann die letzten 24 Stunden ausgeben lässt und der Rest nicht mehr zu sehen ist.
Beispielsweise ist es Sep 3 12:44 Uhr, dann sollte die Ausgabe so aussehen:
Sep 2 12:41:43 hier steht text 6
Sep 2 12:43:33 hier steht text 7
Wenn es Sep 3 13:00 Uhr ist soll die Ausgabe leer sein also nichts zu sehen sein.
Ich habe es schon hiermit versucht
grep `(date +"%b %d %H:" -d "24hours ago")` /var/log/messages
jedoch funktioniert es damit nicht.
Kennt jemand die Lösung meines Problems?
Vielen Dank schon mal!
ich möchte mir in Linux aus der /var/log/messages Dateiinhalte der letzten 24 Stunden anzeigen lassen, alles was davor in die Datei geschrieben wurde möchte ich nicht sehen.
Beispiel:
ich habe eine Datei in der steht
Aug 24 09:41:54 hier steht text 1
Aug 26 13:06:08 hier steht text 2
Sep 2 03:04:26 hier steht text 3
Sep 2 03:04:33 hier steht text 4
Sep 2 03:08:41 hier steht text 5
Sep 2 12:41:43 hier steht text 6
Sep 2 12:43:33 hier steht text 7
Ich benötige jedoch nur die Dateiinhalte der letzten 24 Stunden, also dass man mit date das aktuelle Datum ausliest und sich dann die letzten 24 Stunden ausgeben lässt und der Rest nicht mehr zu sehen ist.
Beispielsweise ist es Sep 3 12:44 Uhr, dann sollte die Ausgabe so aussehen:
Sep 2 12:41:43 hier steht text 6
Sep 2 12:43:33 hier steht text 7
Wenn es Sep 3 13:00 Uhr ist soll die Ausgabe leer sein also nichts zu sehen sein.
Ich habe es schon hiermit versucht
grep `(date +"%b %d %H:" -d "24hours ago")` /var/log/messages
jedoch funktioniert es damit nicht.
Kennt jemand die Lösung meines Problems?
Vielen Dank schon mal!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 248180
Url: https://administrator.de/forum/bestimmtes-datum-von-einem-file-auslesen-linux-248180.html
Ausgedruckt am: 24.04.2025 um 11:04 Uhr
9 Kommentare
Neuester Kommentar
Moin,
das funktioniert so mit grep nicht. Du müßtest ein Skript oder Programm schreiben, daß die logdateie einliest, die einträge am zeilenende interpretiert und dann diese ausgibt, falls die neuer sind als das gewünschte Datum.
Wenn es allerdings ab Mitternacht des Vortages auch geht, ist es einfacher:
lks
das funktioniert so mit grep nicht. Du müßtest ein Skript oder Programm schreiben, daß die logdateie einliest, die einträge am zeilenende interpretiert und dann diese ausgibt, falls die neuer sind als das gewünschte Datum.
Wenn es allerdings ab Mitternacht des Vortages auch geht, ist es einfacher:
grep "^`date -d yesterday \"+%b %_d\"`" /var/log/syslog ; grep "^`date \"+%b %_d\"`" /var/log/syslog
lks
Zitat von @lapvika:
Wie funktioniert das ganze für ein Zeitintervall, beispielsweise 5 Minuten. Also das alles was innerhalb der letzten 5
Minuten in die messages geschrieben wurde angezeigt wird, alles was älter als 5 Minuten ist nicht mit angezeigt wird?
Wie funktioniert das ganze für ein Zeitintervall, beispielsweise 5 Minuten. Also das alles was innerhalb der letzten 5
Minuten in die messages geschrieben wurde angezeigt wird, alles was älter als 5 Minuten ist nicht mit angezeigt wird?
wie ich schon sagte: Du mußt die Daten am anfang der zeile einlesen udn interpretieren. durch einfaches grep funktioniert das nicht.
lks
Indem man ein prgramm schreibt, daß aus Monat, tag und Uhrzeit eine Zahl macht, die man dann mit dem refenrzdatum vergleicht.
Alternativ kann man auch sukzessive Monat, tag, Stunde, Minute, und sekunde vergleichen, ist aber meist aufwendiger zu formulieren.
lks
Moin,
z.B. so:
Grüße Uwe
z.B. so:
#!/bin/bash
date1=$(date '+%s')
date2=$(date -d "24 hours ago" '+%s')
while read line
do
line_date_sec=$(date -d "$(echo "$line" | awk '{print $1,$2,$3}')" '+%s')
if [[ $date2 -le $line_date_sec && $date1 -ge $line_date_sec ]];then
echo "$line"
fi
done < /var/log/messages
Siehe uwes Skript.
Wie gesagt ich bin da noch ganz frisch in der Materie.
Dann soltest Du anfangen, dich damit zu beschäftigen:
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
lks