Como extrair uma linha seguida por um intervalo de linhas

1

Estou tentando extrair uma única linha contendo domain: seguido por intervalo de linhas de nameservers" a ] . Eu sei como fazer essas coisas separadamente usando grep e awk respectivamente, mas não tenho certeza de como fazê-lo de uma vez.

Dados de entrada:

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

Saída desejada:

  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.",
  ],

Comandos para extrair dados separadamente:

  grep "domain:" test_sample.txt      
  awk '/nameservers"/,/]/' test_sample.txt
    
por Alex 03.07.2017 / 22:47

2 respostas

0

abordagem awk

awk '/^domain:/{print}/"nameservers":/,/]/' test_sample.txt
    
por 03.07.2017 / 23:48
0
Abordagem

grep com a opção P ( PCRE ):

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

A saída:

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.",
  ],

O padrão principal é baseado no grupo de alternância regex <domain_line>|<nameservers_lines>

    
por 03.07.2017 / 23:03

Tags