SED 교체 문제

SED 교체 문제

다음 문자열이 있습니다.

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는 가능한 경우 욕심 많은 일치 = 일치를 수행하므로 사용하지 마십시오 . 를 사용하면 .[^.]*처음 발견된 지점까지 모든 문자가 일치합니다.

관련 정보