다음 순서에서 날짜와 시간을 추출하고 싶습니다
/hs_nfs/hsfiq/AXZIP-PP567/was_logs/was_admin_logs/start_WPS.log.04-24-2018-08.36.Apr24.zip:ADMU3000I: Server Node_axzip-pp567_AppClusterMember open for e-business;
필드를 다음과 같이 추출하고 싶습니다.
Date Time
04-24-2018 08.36
답변1
sed -E -e 's/^.*log\.//' -e 's/\.[A-Z].*//' -e 's/([0-9]{4})-/\1 /'
첫 번째 표현식은 log.
해당 날짜까지 문자열의 모든 내용을 삭제합니다.
두 번째 표현식은 시간 뒤의 점 안에 있는 모든 내용을 삭제합니다(점 뒤에 대문자가 오는 유일한 점).
세 번째 표현식은 네 자리 숫자(연도) 뒤의 대시를 공백으로 바꿉니다.
문제의 입력이 주어지면 다음이 생성됩니다.
04-24-2018 08.36
답변2
NN-NN-NNNN-NN.NN
날짜와 시간이 where is a number 처럼 각 줄에 고유한 형식을 갖는 경우 N
단일 grep을 사용할 수 있습니다.
$ grep -Eo '[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1
04-24-2018-08.36
#to remove the third (last) dash you can pipe to sed
$ grep -Eo '[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1 |sed 's/-/ /3g'
04-24-2018 08.36
정규식 위에 "바인딩"하려면 WPS.log.
-P 스위치와 함께 gnu grep을 사용할 수 있습니다(perl 정규식 지원).
$ grep -Po '^.*WPS.log.\K[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1 |sed 's/-/ /3g'
04-24-2018 08.36
#\K == forget everything captured so far == forget ^.*WPS.log.