corte duas vezes no campo

0

Eu tenho um registro como

192.168.28.168  user82  [08/May/2010:09:52:52]  "GET /NoAuth/js/titlebox-state.js HTTP/1.1"     "http://www.example.com/index.html"     "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0" 

Eu quero que a saída final seja apenas como exibição

   /NoAuth/js/titlebox-state.js HTTP/1.1

Eu uso este comando e consigo o seguinte

cut -f4 example.log

"GET /NoAuth/js/titlebox-state.js HTTP/1.1"

mas, eu preciso remover ["GET] também, como posso fazer isso com cut ou awk ou sed?

    
por Numan 02.03.2018 / 23:24

3 respostas

2

Awk abordagem:

awk '{ sub(/"/, "", $6); print $5, $6 }' file

A saída:

/NoAuth/js/titlebox-state.js HTTP/1.1
    
por 02.03.2018 / 23:31
0

Sed abordagem:

sed -n 's/.*"GET \([^ ]* HTTP\/[0-9\.]*\)".*//p' example.log

Ele procura *"GET (<no-whitespaces> HTTP/<digits-and-dots>)"* e retorna correspondências entre parênteses.

    
por 02.03.2018 / 23:37
0

Abordagem alternativa com regexps gnu grep e Perl:

$ echo "$a"
192.168.28.168  user82  [08/May/2010:09:52:52]  "GET /NoAuth/js/titlebox-state.js HTTP/1.1"     "http://www.example.com/index.html"     "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0"

$ echo "$a" |grep -Po '(?<=GET ).*(?=".*"http)'
/NoAuth/js/titlebox-state.js HTTP/1.1
$#or
$ echo "$a" |grep -Po '(?<=GET).*(?=".*"http)'
 /NoAuth/js/titlebox-state.js HTTP/1.1 #leading space preserved

(?<=GET ) == lookbehind para a palavra GET & space
.* == corresponde a qualquer caractere zero ou mais vezes após lookbehind e até lookahead
(?=".*"http) == lookahead para " & any char zero or more times & "http

    
por 03.03.2018 / 00:05

Tags