Expressão regex Perl

2

Eu tenho a seguinte string produzida por um arquivo de log do servidor. Estou usando o Simple Event Correlator (que usa perl regex) para manipular linhas:

18:37:31 643.65.123.123 []sent /home/mydomain/public_html/court-954fdw/Chairman-confidential-video.mpeg 226 [email protected] 256

e eu tenho sido bem sucedido em usar regex perl para extrair com sucesso o usuário que efetua login com o seguinte padrão.

NOTA: os valores que SEC usa são extraídos dos dados contidos nos parênteses:

pattern=sent \/home\/mydomain\/public_html\/(.*)\/(.*)

No entanto, não tive sucesso em analisar apenas o nome do arquivo que, nesse caso, seria: Chairman-confidential-video.mpeg .

Atualmente, o padrão existente que eu uso puxa toda a string:

Chairman-confidential-video.mpeg 226 [email protected] 256

que eu não quero. Qualquer ajuda muito apreciada.

    
por leptserkhan 06.03.2013 / 18:26

3 respostas

2

Eu provavelmente usaria:

pattern=sent \/home\/mydomain\/public_html\/(.*)\/(\S+).*

Isso deve extrair todos os caracteres, exceto os espaços em branco, para a última correspondência de captura, e deixar o restante para a correspondência de não captura.

    
por 06.03.2013 / 19:19
0

Eu usaria o seguinte:

pattern=sent \/home\/mydomain\/public_html\/(.*?)\/\(.* ?)\S*.*$

Para correspondência não-gulosa mais explícita. Seu resultado será agora em $ 2. Isso pressupõe que você não pode codificar nada abaixo de public_html. Isso deixa um espaço à direita.

    
por 06.03.2013 / 21:51
0

Outras respostas não assumem espaços em branco no nome do arquivo, uma suposição bastante arriscada. Uma aposta mais segura é não assumir barras no nome do arquivo, já que isso é ilegal no linux:

pattern=sent \/home\/mydomain\/public_html\/([^\/]+)\/([^\/]+) [0-9]+ \S+@\S+ [0-9]+$

Testado no link

    
por 06.07.2016 / 21:31

Tags