다음 문자열이 있습니다.
2017-09-17T21:01:15,914 INFO [01196526] :sasadm@saspw - New client connection (155885) accepted from server port 8561 for SAS token user sasadm@saspw. Encryption level is Credentials using encryption algorithm SASPROPRIETARY. Peer IP address and port are [::ffff:191.0.0.7]:39962 for APPNAME=/SASAuthorizationServices - Visual Data Builder 7.4.
2017-09-17T23:58:17,043 INFO [01211539] :sastrust@saspw - New client connection (163346) accepted from server port 8561 for user sastrust@saspw. Encryption level is Credentials using encryption algorithm SASPROPRIETARY. Peer IP address and port are [::ffff:191.0.0.7]:37400 for APPNAME=Content Server 9.4.
나는 그것들을 다음으로 교체해야 한다.
2017-09-17T21:01:15,sasadm@saspw,LOGIN,SUCCESS,Successful Login
또는
2017-09-17T23:58:17,sastrust@saspw,LOGIN,SUCCESS,Successful Login
이렇게 했지만 예상한 결과를 얻지 못했습니다.
sed -n '/New client connection ([0-9]*) accepted from server port [0-9]* for/{s/,.* user \(.*\)\. .*/,\1,LOGIN,SUCCESS,Successful Login/;p}'
이것은 내 오류 출력입니다.
2017-09-17T21:01:15,sasadm@saspw. Encryption level is Credentials using encryption algorithm SASPROPRIETARY,LOGIN,SUCCESS,Successful Login
답변1
귀하의 시도는 매우 가깝습니다.
$ sed -n '/New client connection ([0-9]*) accepted from server port [0-9]* for/{s/,.* user \(.[^.]*\)\. .*/,\1,LOGIN,SUCCESS,Successful Login/;p}' file1
2017-09-17T21:01:15,sasadm@saspw,LOGIN,SUCCESS,Successful Login
2017-09-17T23:58:17,sastrust@saspw,LOGIN,SUCCESS,Successful Login
달라야 할 유일한 점은 패턴이 \(\)
user@host 이외의 어떤 것과도 일치할 수 없다는 것입니다. 따라서 .*
sed는 가능한 경우 욕심 많은 일치 = 일치를 수행하므로 사용하지 마십시오 . 를 사용하면 .[^.]*
처음 발견된 지점까지 모든 문자가 일치합니다.