Minha consulta é extrair o valor entre aspas duplas ""
. A entrada de amostra é:
10.219.41.68 - - - [11 / Jun / 2014: 10: 23: 04 -0400] Sec: 0 MicSec: 1797 "GET / gerenciador de balanceamento HTTP / 1.1" 200 28980 "-" "curl / 7.15.5 (i386 -redhat-linux-gnu) libcurl / 7.15.5 OpenSSL / 0.9.8b zlib / 1.2.3 libidn / 0.6.5 "
Eu tenho arquivos de log grandes, portanto os valores podem variar para cada linha, preciso extrair o valor entre a primeira ocorrência de aspas duplas…
Saída esperada:
GET /balancer-manager HTTP/1.1
Alguém tem alguma idéia, então por favor sugerir.
Respostas:
Você pode apenas usar
cut
para isso:-d '"'
dizcut
para usar aspas duplas como seu delimitador de campo.-f2
diz para ele pegar o segundo campo, que fica entre a primeira e a segunda aspas - ou a primeira string entre aspas, exatamente o que você deseja.fonte
%!cut -d '"' -f2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58
?Uma maneira de usar
awk
Se, por algum motivo absurdo, seus métodos HTTP forem realmente
0
e você deseja gerar essesfonte
$2
for nulo?0
não apenas nulo?Como já foram fornecidas soluções
awk
eperl
, eu queria tentarsed
:fonte
Você pode fazer isso de várias maneiras.
Com
awk
:Com
perl
:fonte
processamento de números de entrada citados
fonte