2017-12-21 20 views
-1

나는 결과를 가져 오기의는 다음과 같습니다 로그 파일에서 전체 일까지 2017-12-19 19:14에서 가정 해 봅시다 싶습니다 -지정된 시간 범위 내에서 로그 파일에서 추출 된 행을 인쇄하는 방법은 무엇입니까?

/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 

내가 유닉스 새로운 grep 명령을 잘 알고입니다. 나는 아래 명령을 시도했다.

date="2017-12-19 [19-23]:[14-59]" 
echo "$date" 
grep "$date" $root_path_values 

그러나 잘못된 범위 끝 오류가 발생한다. 어떤 해결책? 날짜는 변수에서 나올 것이므로 예측할 수 없습니다. 따라서 예제를 염두에 두라는 명령을 내리지 마십시오. $ root_path_values는 errorLog.txt, errorLog_1.txt, errorLog_2.txt 등과 같은 오류 파일의 순서입니다.

+1

볼을 https://www.gnu.org/software/grep/manual/grep.html#Character-Classes-and-Bracket-Expressions '[]'에 관해서 .. 그들은 당신이해야한다고 생각하는 것을하지 않을 것입니다 ... – Sundeep

+0

숫자 범위를 만드는 방법은 https://www.regular-expressions.info/numericranges.html을 참조하십시오 – Sundeep

답변

-1

egrep '2017-12-19 (19|2[0-3])\:(1[4-9]|[2-5][0-9])\:*\.*' path/to/your/file이 정규 표현식을 사용해보세요. 경우

당신이 변수에 패턴이 필요한 경우 :

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

이 정규식을 설명 할 수 있습니까 세부 묘사? – basari66

+0

@ rishabhv66 첫 부분 :'(19 | 2 [0-3])'올바른 시간 부분 문자열 찾기,'(19 또는 (20 or 21 or 22 or 23))'을 의미하며 두 번째'\ :'사이의 두 번째 부분은' (14 또는 15 또는 16 또는 17 또는 18 또는 19) 또는 (<많은 수가 20에서 59까지와 같이) 분을 찾는 경우 (1 [4-9] | [2-5] [0-9]) '. 마지막'* \. *'은 여기서 처음으로'*'는 '초 단위의 문자열'을 의미하고, '점'은 마지막 점을 의미합니다. '*'는 '밀리 초 단위의 문자열'을 의미합니다. 첫 번째 부분을 명확하게 이해하기 위해 :'2 [0-9]는 "두 문자가있는 문자열, 첫 번째 문자는 2, 두 번째 문자는 0-9 사이의 문자"를 의미합니다. –

+0

따라서 전체 정규식은 다음과 같이 읽을 수 있습니다. "(19 또는"첫 번째 문자가 '2'이고 두 번째 문자가 0과 3 사이 인 2 문자 길이의 문자열) :("2 문자 길이의 긴 문자열 첫 번째 문자 '1'이고 4 ~ 9 사이의 두 번째 항목 '또는'첫 번째 채팅은 2 ~ 5 사이의 두 문자 길이 문자열이며 두 번째 문자는 0과 9 사이의 값입니다. ') : "어떤 종류 . "문자열의 종류". "상관하지 않습니다." –