it-swarm.com.de

Extrahieren Sie den Wert zwischen doppelten Anführungszeichen

Meine Abfrage ist, den Wert zwischen doppelten Anführungszeichen zu extrahieren "". Beispiel Eingabe ist:

10.219.41.68 - - - [11/Jun/2014: 10: 23: 04 -0400] Sec: 0 MicSec: 1797 GET/Balancer-Manager 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 "

Ich habe große Protokolldateien, daher können die Werte für jede Zeile variieren. Sie müssen den Wert zwischen dem ersten Auftreten von doppelten Anführungszeichen extrahieren.

Erwartete Ausgabe:

GET /balancer-manager HTTP/1.1

Jeder, der eine Idee hat, schlägt dies bitte vor.

17
user79658

Sie können einfach cut dafür verwenden:

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

-d '"' weist cut an, ein doppeltes Anführungszeichen als Feldtrennzeichen zu verwenden. -f2 weist es an, das zweite Feld, das zwischen dem ersten und dem zweiten Anführungszeichen steht - oder die Zeichenfolge mit dem ersten Anführungszeichen - genau das zu nehmen, was Sie wollen.

28
Michael Homer

Ein Weg mit awk

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

Wenn Ihre HTTP-Methoden aus irgendeinem absurden Grund tatsächlich 0 Sind und Sie diese ausgeben möchten

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

Da bereits Lösungen für awk und Perl bereitgestellt werden, wollte ich sed ausprobieren:

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

Sie können es auf viele Arten tun.

Mit awk:

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

Mit Perl:

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

verarbeitung von zitierten Eingabenummern

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
0
A-Man