Extraire la valeur entre guillemets

Ma requête est d'extraire la valeur entre guillemets "" . L'input d'échantillon est:

10.219.41.68 – – – [11 / Jun / 2014: 10: 23: 04 -0400] Sec: 0 MicSec: 1797 "GET / gestionnaire d'équilibrage HTTP / 1.1" 200 28980 "-" "curl / 7.15.5 -redhat-linux-gnu) libcurl / 7.15.5 OpenSSL / 0.9.8b zlib / 1.2.3 libidn / 0.6.5 "

J'ai de grands files journaux, donc les valeurs peuvent varier pour chaque ligne, besoin d'extraire la valeur entre la première occurrence des guillemets doubles …

Production attendue:

 GET /balancer-manager HTTP/1.1 

N'importe qui a une idée alors s'il vous plaît suggérer.

Vous pouvez simplement utiliser cut pour cela:

 $cut -d '"' -f2 < logfile GET /balancer-manager HTTP/1.1 

-d '"' dit à cut d'utiliser un guillemet double comme délimiteur de champ. -f2 dit de prendre le deuxième champ, qui est entre le premier et le deuxième guillemets – ou la première guillemets, exactement ce que vous voulez.

Une façon d'utiliser awk

 awk -F'"' '$0=$2' file 

Si pour une raison absurde vos methods HTTP sont réellement 0 et que vous voulez sortir ces

 awk -F'"' '{$0=$2}1' file 

Comme les solutions awk et perl sont déjà fournies, je voulais essayer sed :

 sed 's/[^"]*"\([^"]*\)".*/\1/' file 

Vous pouvez le faire de plusieurs façons.

Avec awk :

 $ awk -F'"' '{print $2}' file GET /balancer-manager HTTP/1.1 

Avec perl :

 $ perl -F'"' -anle 'print $F[1]' file GET /balancer-manager HTTP/1.1 

traiter les numéros d'input cités

 echo 1234 | awk '{ i=strtonum($1) ; printf( "%s %d\n",$1, i)}' # no problem echo '"1234"' | awk '{ i=strtonum($1) ; printf( "%s %d\n",$1, i)}' # does not work echo '"1234"' | awk '{ gsub("\"",""); i = $1 ; printf( "%s %d\n",$1, i)}' # works