행과 일련의 행을 추출하는 방법

행과 일련의 행을 추출하는 방법

domain:nameservers"행 범위 와 to가 포함된 단일 행을 추출하려고 합니다 ]. 나는 이러한 일을 개별적 grep으로 수행하는 방법을 알고 있지만 awk즉시 수행하는 방법은 모릅니다.

입력 데이터:

domain: stackexchange.com date: Mon Jul 3 00:43:49 2017 output_dir:        /tmp/stackexchange.com.12653
INFO:root:crawl: exiting dom: 'stackexchange.com' took: 10s
INFO:root:2017-07-03 00:44:06:370 slave.py: exiting args.url: 'stackexchange.com' took: 3s
+ comparing web systems

  "mail_server_ip": [],              |   "mail_server_ip": []
  "nameservers": [
    "ns-925.awsdns-51.net.",
    "ns-1029.awsdns-00.org.",
    "ns-cloud-d1.googledomains.com.",
    "ns-cloud-d2.googledomains.com.",
  ],
  "nameservers_domains": [           |   "nameservers_domains": [], 
    "m

원하는 출력:

  domain: stackexchange.com date: Mon Jul 3 00:43:49 2017 output_dir:        
  "nameservers": [
    "ns-925.awsdns-51.net.",
    "ns-1029.awsdns-00.org.",
    "ns-cloud-d1.googledomains.com.",
    "ns-cloud-d2.googledomains.com.",
  ],

데이터를 개별적으로 추출하는 명령:

  grep "domain:" test_sample.txt      
  awk '/nameservers"/,/]/' test_sample.txt

답변1

방법

awk '/^domain:/{print}/"nameservers":/,/]/' test_sample.txt

답변2

grep가까운 P(폴리 메라 제 연쇠 반응) 옵션:

grep -Poz 'domain: .+ output_dir:|\s*"nameservers": \[[^][]+\],\n' test_sample.txt

산출:

domain: stackexchange.com date: Mon Jul 3 00:43:49 2017 output_dir:
  "nameservers": [
    "ns-925.awsdns-51.net.",
    "ns-1029.awsdns-00.org.",
    "ns-cloud-d1.googledomains.com.",
    "ns-cloud-d2.googledomains.com.",
  ],

주요 패턴은 정규식 교대 그룹을 기반으로 합니다.<domain_line>|<nameservers_lines>

관련 정보