首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GREP或AWK仅提取匹配线的字段

如何使用GREP或AWK仅提取匹配线的字段
EN

Stack Overflow用户
提问于 2022-10-12 21:40:52
回答 3查看 50关注 0票数 0

我只想从文本文件中提取匹配REGEX - CVE-[0-9]{4}-[0-9]{4,19}的CVE数字。由于数据集的合并,CVE在每一行中的表示方式是不同的。

代码语言:javascript
复制
cat text.txt
Security updates available for Adobe Flash Player (CVE-2014-8439)
CVE-2016-4449: SUSE Linux Security Advisory
Security vulnerabilities fixed in Firefox 66:CVE-2019-9799

我可以使用egrep 'CVE-[0-9]{4}-[0-9]{4,19}' test.txt匹配这些行

如何仅提取CVE编号以使用grep或AWK获取列表?

代码语言:javascript
复制
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-12 21:46:51

添加一些额外的行(多个CVE,最后一个元组中的可变数字数):

代码语言:javascript
复制
$ cat test.txt
Security updates available for Adobe Flash Player (CVE-2014-8439)
CVE-2016-4449: SUSE Linux Security Advisory
Security vulnerabilities fixed in Firefox 66:CVE-2019-9799

CVE-7777-1234: SUSE fixed in Firefox 66:CVE-7777-567890
CVE-8888-14: SUSE fixed in Firefox 66:CVE-8888-090923487

awk的一个想法是:

代码语言:javascript
复制
awk '
BEGIN { regex="CVE-[0-9]{4}-[0-9]{4,19}" }
      { while (match($0,regex)) {
              print substr($0,RSTART,RLENGTH)
              $0=substr($0,RSTART+RLENGTH)
        }
      }
' test.txt

这就产生了:

代码语言:javascript
复制
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799
CVE-7777-1234
CVE-7777-567890
CVE-8888-090923487
票数 1
EN

Stack Overflow用户

发布于 2022-10-12 21:43:06

我想这就是你需要的:

代码语言:javascript
复制
cat file|grep -Po 'CVE-[0-9]{4}-[0-9]+'
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799

或者:

代码语言:javascript
复制
grep -Po 'CVE-[0-9]{4}-[0-9]+' file

grep的-o =仅匹配模式,而-P用于perl-regex

票数 1
EN

Stack Overflow用户

发布于 2022-10-13 02:58:55

代码语言:javascript
复制
# grep -Eo 'CVE-[0-9]{4}-[0-9]{4,19}' test.txt
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74048261

复制
相关文章

相似问题

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