2016-05-23 6 views
0

Ich versuche, eine bestimmte Zeitstempel (in meinem Fall alle 15 Minuten) in der Protokolldatei mit sed Befehl in bash Scripting zu bekommen.Kann ich Stunden im sed-Befehl durch Variable ersetzen? [Fall geschlossen]

Meine Frage ist, kann ich die Stunden im Befehl durch eine Variable ersetzen?

Dies ist Skript, das ich will:

#!/bin/bash 

hour=`date +%H` #Current Hours e.g 14:00 

sed -n '/$hour:15:00/,/$hour:30:00/p' file.log | nice grep Event 

Das Ergebnis wird die Logdatei von 14.15.00 bis 14.30.00 drucken. Aber es gibt ein Problem, wenn der Bereich von 45 Minuten bis 60 Minuten ist, was 14:45 - 15:00 Uhr ist. Gibt es dafür eine Lösung?

UPDATE

Dieses Problem bereits gelöst ist, für mich den Befehl unter der Arbeit.

sed -n "/${hour}:15:00/,/${hour}:30:00/p" file.log | nice grep Event

Andere Referenz: Replace a string in shell script using a variable

Danke.

== Fall geschlossen ==

+0

Warum möchten Sie Ihre Protokolldatei ändern? – GMichael

+0

@Michael: Ich denke, er versucht, aus der Protokolldatei in 15-Minuten-Schritten auszuwählen, anstatt zu versuchen, es zu bearbeiten. –

+1

Sie sollten einige Zeilen der Protokolldatei anzeigen (oder zumindest den Datums-/Uhrzeitabschnitt und einige zusätzliche Felder). Ein Problem, das Sie beachten sollten, ist, dass "sed" wörtliche Übereinstimmungen ausführt. Wenn es um 14:15:00 kein protokolliertes Ereignis gab (wenn zum Beispiel eines um 14:14:59 und das nächste um 14:15:01 war), wird der Anfang des Bereichs niemals übereinstimmen. Ähnlich mit dem Ende des Bereichs. Sie könnten es besser mit "awk" machen. Müssen Sie irgendwann am Ende eines Tages (23:45 - 24:00) scannen? –

Antwort

0

Nun, die Frage zu beantworten - ja, würden Sie die Variable aus den Zitaten und dann sollte es den Wert verwenden:

sed -n '/'$hour:15:00/,/'$hour':30:00/p' file.log | nice grep Event 

Sie könnten auch Verwenden Sie doppelte Anführungszeichen um den Ausdruck

sed -n "/${hour}:15:00/,/${hour}:30:00/p" file.log | nice grep Event 
Verwandte Themen