我只想从文本文件中提取匹配REGEX - CVE-[0-9]{4}-[0-9]{4,19}的CVE数字。由于数据集的合并,CVE在每一行中的表示方式是不同的。
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获取列表?
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799发布于 2022-10-12 21:46:51
添加一些额外的行(多个CVE,最后一个元组中的可变数字数):
$ 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-090923487awk的一个想法是:
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这就产生了:
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799
CVE-7777-1234
CVE-7777-567890
CVE-8888-090923487发布于 2022-10-12 21:43:06
我想这就是你需要的:
cat file|grep -Po 'CVE-[0-9]{4}-[0-9]+'
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799或者:
grep -Po 'CVE-[0-9]{4}-[0-9]+' filegrep的-o =仅匹配模式,而-P用于perl-regex
发布于 2022-10-13 02:58:55
# grep -Eo 'CVE-[0-9]{4}-[0-9]{4,19}' test.txt
CVE-2014-8439
CVE-2016-4449
CVE-2019-9799https://stackoverflow.com/questions/74048261
复制相似问题