sed 또는 grep을 사용하여 파일의 패턴 필터링

sed 또는 grep을 사용하여 파일의 패턴 필터링

extended.log명령을 사용 awk하거나 grep해당 파일에 있는 모든 고유 사용자 이름을 새 파일에 저장하고 싶습니다 sed.

아래는 탭으로 구분된 내 파일의 필드 이름입니다. 나는 이 필드(12번째 필드)의 값만 원합니다 "username".

"record_id"     "client_id"     "request_id"    "date_time"     "elapsed_time"  "status"        "size"  "upload"        "download"      "bypassed"      "client_ip"     "username"      "method"        "url"   "http_referer"  "useragent"     "mime"  "filter_name"   "filtering_reason"      "interface"     "cachecode"     "peercode"      "peer"  "request_host"  "request_tld"   "referer_host"  "referer_tld"   "range" "time_profiles" "user_groups"   "request_profiles"      "application_signatures"        "categories"    "response_profiles"     "upload_content_types"  "download_content_types"        "profiles"

다음은 파일 내용의 예입니다.

"SVZerDLJhIj6G3PA.6575.1466420105.346.1837.1"   "1837"  "1"     "20/Jun/2016:16:25:05"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420107.357.1838.1"   "1838"  "1"     "20/Jun/2016:16:25:07"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420109.367.1840.1"   "1840"  "1"     "20/Jun/2016:16:25:09"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420111.377.1841.1"   "1841"  "1"     "20/Jun/2016:16:25:11"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420113.387.1842.1"   "1842"  "1"     "20/Jun/2016:16:25:13"  "5"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420115.399.1843.1"   "1843"  "1"     "20/Jun/2016:16:25:15"  "5"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420117.410.1844.1"   "1844"  "1"     "20/Jun/2016:16:25:17"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420119.421.1845.1"   "1845"  "1"     "20/Jun/2016:16:25:19"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420121.431.1846.1"   "1846"  "1"     "20/Jun/2016:16:25:21"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420123.445.1847.1"   "1847"  "1"     "20/Jun/2016:16:25:23"  "4"     "200"   "0"     "-"     "0"     "-"     "192.168.12.13" "[email protected]""GET"   "-"     "-"     "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"   "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "safesquid"      "192.168.14.11:8080"    "-"     "-"     "-"     "0"     ""      "NO_AUTHENTICATION"     ""      ""      ""      ""      ""      ""      ""
"SVZerDLJhIj6G3PA.6575.1466420108.240.1839.1"   "1839"  "1"     "20/Jun/2016:16:25:23"  "15623" "200"   "2826"  "0"     "2826"  "-"     "192.168.0.14"  "[email protected]""CONNECT"        "connect://livehelp.safesquid.com:443/" "-"     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"    "-"     "-"     "-"     "192.168.14.11:8080"    "TCP_MISS"      "DIRECT"        "livehelp.safesquid.com"        "livehelp.safesquid.com"        "safesquid.com" "-"     "-"      "1K-10K"        ""      "NO_AUTHENTICATION"     "uncachable request,BUSINESS SITES REQ" ""      "computersandsoftware"  ""      ""      ""      "uncachable"

답변1

노력하다

 sed -e 's/^.*"\([^" ]*\)"".*/\1/' log | sort | uniq

 egrep -o  '[^"]+@[^"]+' log | sort | uniq

어디

  • -o일치하는 패턴만 인쇄
  • [^X]+다음과 다른 임의의 수(> 0)의 문자X

참고하세요

  • sed 솔루션 릴레이 파일의 오타/기능(큰따옴표)
  • grep 솔루션 릴레이[이메일 보호됨]무늬
  • awk(또는 perl)는 n번째 필드를 추출하는 데 더 적합합니다.

답변2

awk탭으로 구분된 파일에 사용:

awk -F '\t' '{ print $12 }' file

그러면 12번째 필드가 추출됩니다. 필요한 경우 출력을 새 파일로 리디렉션할 수 있습니다.

사용할 수 있는 데이터에서 양쪽에 있는 큰따옴표를 제거하려면

awk -F '\t' '{ sub("^\"", "", $12); sub("\"$", "", $12); print $12 }' file

그러면 인쇄하기 전에 12번째 필드의 첫 번째와 마지막 문자(큰따옴표인 경우)를 제거하기 위해 두 번의 대체가 수행됩니다.

첫 번째 행을 건너뛰려면(헤더 행인 경우):

awk -F '\t' 'FNR > 1 { sub("^\"", "", $12); sub("\"$", "", $12); print $12 }' file

고유한 사용자 이름만 얻으려면 다음을 사용하세요 awk.

awk -F '\t' 'FNR > 1 && !( $12 in seen ) { seen[$12]++; sub("^\"", "", $12); sub("\"$", "", $12); print $12 }' file

이는 12번째 필드로 입력된 배열을 사용하여 확인된 사용자 이름을 추적합니다. 12번째 필드의 데이터가 배열의 키가 아닌 경우 아직 표시되지 않은 것입니다.

또 다른 접근 방식 은 !seen[$12].!( $12 in seen )

sort고유하고 정렬된 사용자 이름을 얻으려면 다음을 사용하세요 .

awk -F '\t' 'FNR > 1 { sub("^\"", "", $12); sub("\"$", "", $12); print $12 }' file | sort -u

관련 정보