큰 따옴표 사이의 값 추출 2014 : 10 :

내 쿼리는 큰 따옴표 사이의 값을 추출하는 것 ""입니다. 샘플 입력은 다음과 같습니다.

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

누구든지 아이디어가 있다면 제안하십시오.



답변

당신은 cut이것을 위해 사용할 수 있습니다 :

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

-d '"'cut큰 따옴표를 필드 구분 기호로 사용하도록 지시 합니다. -f2첫 번째와 두 번째 따옴표 사이 또는 첫 번째 따옴표로 묶인 문자열 사이에있는 두 번째 필드를 가져 가도록 지시합니다.


답변

사용하는 방법 awk

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

어떤 불합리한 이유로 HTTP 메소드가 실제로 0있고 이들을 출력하려는 ​​경우

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

답변

이후 awkperl솔루션을 이미 제공, 내가 원했고 sed:

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

답변

여러 가지 방법으로 할 수 있습니다.

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

답변

인용 된 입력 번호 처리

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