处理带引号的输入数字

处理带引号的输入数字

我的查询是提取双引号之间的值""。输入示例为:

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"

我有很大的日志文件,因此每行的值可能有所不同,需要提取第一次出现的双引号之间的值...

预期输出:

GET /balancer-manager HTTP/1.1

任何人有任何想法,请建议。

答案1

你可以只使用cut为了这:

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

-d '"'告诉cut使用双引号作为其字段分隔符。-f2告诉它获取第二个字段,该字段位于第一个和第二个引号之间 - 或第一个带引号的字符串,正是您想要的。

答案2

一种使用方式awk

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

如果由于某种荒谬的原因你的 HTTP 方法实际上是0并且你想输出这些

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

答案3

您可以通过多种方式做到这一点。

awk

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

perl

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

答案4

处理带引号的输入数字

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

相关内容