cut 명령은 필드를 추출합니다.

cut 명령은 필드를 추출합니다.

다음 순서에서 날짜와 시간을 추출하고 싶습니다

/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.

관련 정보