首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提取一行后行范围

如何提取一行后行范围
EN

Unix & Linux用户
提问于 2017-07-03 20:47:50
回答 2查看 154关注 0票数 1

我正在尝试提取一个包含domain:的行,然后是从nameservers"]的一系列行。我知道如何分别使用grepawk分别完成这些工作,但不知道如何一次完成。

输入数据:

代码语言:javascript
复制
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

期望产出:

代码语言:javascript
复制
  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.",
  ],

单独提取数据的命令:

代码语言:javascript
复制
  grep "domain:" test_sample.txt      
  awk '/nameservers"/,/]/' test_sample.txt
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2017-07-03 21:48:03

awk方法

代码语言:javascript
复制
awk '/^domain:/{print}/"nameservers":/,/]/' test_sample.txt
票数 0
EN

Unix & Linux用户

发布于 2017-07-03 21:03:32

采用P (PCRE)选项的grep方法:

代码语言:javascript
复制
grep -Poz 'domain: .+ output_dir:|\s*"nameservers": \[[^][]+\],\n' test_sample.txt

产出:

代码语言:javascript
复制
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.",
  ],

主要的模式是基于regex交替组<domain_line>|<nameservers_lines>

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/375065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档