2017-12-21 6 views
-1

Ich möchte Ergebnis holen, sagen wir, von 2017-12-19 19:14 bis den ganzen Tag aus einer Protokolldatei, die wie folgt aussieht -Wie können Zeilen gedruckt werden, die innerhalb eines bestimmten Zeitraums aus einer Protokolldatei extrahiert wurden?

/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:00.723 Info: Saving /var/opt/MarkLogic/Forests/Meters/00001829 
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:01.134 Info: Saved 9 MB at 22 MB/sec to /var/opt/MarkLogic/Forests/Meters/00001829 
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:01.376 Info: Merging 19 MB from /var/opt/MarkLogic/Forests/Meters/0000182a and /var/opt/MarkLogic/Forests/Meters/00001829 to /var/opt/MarkLogic/Forests/Meters/0000182c, timestamp=15137318408510140 
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:02.585 Info: Merged 18 MB in 1 sec at 15 MB/sec to /var/opt/MarkLogic/Forests/Meters/0000182c 
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:05.200 Info: Deleted 15 MB at 337 MB/sec /var/opt/MarkLogic/Forests/Meters/0000182a 
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:05.202 Info: Deleted 9 MB at 4274 MB/sec /var/opt/MarkLogic/Forests/Meters/00001829 

Ich bin neu in Unix und vertraut mit grep-Befehl. Ich habe den folgenden Befehl

versucht, aber es löst ungültigen Bereich Ende Fehler. Irgendeine Lösungsmöglichkeit ? Das Datum wird von einer Variablen kommen, so dass es unvorhersehbar ist. Machen Sie deshalb keinen Befehl, wenn Sie nur das Beispiel im Kopf behalten. $ root_path_values ​​ist eine Folge von Fehlerdateien wie errorLog.txt, errorLog_1.txt, errorLog_2.txt und so weiter.

+1

siehe https://www.gnu.org/software/grep/manual/grep.html#Character-Classes-and-Bracket-Expressions in Bezug auf '[]' .. sie tun nicht, was Sie denken, sie sollten ... – Sundeep

+0

siehe https://www.regular-expressions.info/numericranges.html für wie numerische Bereiche zu konstruieren – Sundeep

Antwort

-1

egrep '2017-12-19 (19|2[0-3])\:(1[4-9]|[2-5][0-9])\:*\.*' path/to/your/file Versuchen Sie diese Regexp.

Im Fall, wenn Sie Muster in Variable benötigen:

#!/bin/bash 
date="2017-12-19 (19|2[0-3])\:(1[4-9]|[2-5][0-9])\:*\.*" 
egrep ${date} path/to/your/file 
+0

können Sie diese Regex in erklären Detail? – basari66

+0

@ rishabhv66 erster Teil: '(19 | 2 [0-3])' finden richtige Stunde Teilzeichenfolge, bedeutet '(19 oder (20 oder 21 oder 22 oder 23))', zweiter Teil zwischen zwei '\:' ist ' (1 [4-9] | [2-5] [0-9]) 'seine Suchminuten wie: ((14 oder 15 oder 16 oder 17 oder 18 oder 19) oder (

+0

So könnte die volle Regex gelesen werden als: "(19 oder" zwei-Zeichen-lange Zeichenfolge, wobei erste Zeichen ist "2" und die zweite etwas zwischen 0 und 3 ") :(" zwei Zeichen lang Zeichenfolge wo erste char ist '1' und die zweite zwischen 4 und 9 "oder" zwei-Zeichen-lange Zeichenfolge, wo der erste Chat ist etwas zwischen 2 und 5; der zweite Char ist zwischen 0 und 9 "):" Egal, welche Art von String "." spielt keine Rolle, welche Art von Stachel " –

Verwandte Themen