Problema SED na substituição

0

Eu tenho estas strings:

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.

Eu tenho que substituí-los por

2017-09-17T21:01:15,sasadm@saspw,LOGIN,SUCCESS,Successful Login

ou

2017-09-17T23:58:17,sastrust@saspw,LOGIN,SUCCESS,Successful Login

Foi assim que eu fiz, mas não recebi o resultado esperado:

sed -n '/New client connection ([0-9]*) accepted from server port [0-9]* for/{s/,.* user \(.*\)\. .*/,,LOGIN,SUCCESS,Successful Login/;p}'

Esta é minha saída errada:

2017-09-17T21:01:15,sasadm@saspw.  Encryption level is Credentials using encryption algorithm SASPROPRIETARY,LOGIN,SUCCESS,Successful Login
    
por LucaP 19.09.2017 / 11:17

1 resposta

2

Sua tentativa é muito próxima:

$ sed -n '/New client connection ([0-9]*) accepted from server port [0-9]* for/{s/,.* user \(.[^.]*\)\. .*/,,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

A única coisa que precisa ser diferente é não permitir que o padrão em \(\) corresponda a mais do que usuário @ host. Portanto, não use .* , pois o sed realiza uma correspondência gulosa = corresponde o máximo possível. Usando .[^.]* irá mach todos os chars até o primeiro ponto encontrado.

    
por 19.09.2017 / 11:30

Tags