【发布时间】:2017-08-16 19:09:37
【问题描述】:
我有一行显示在文件中的漏洞一词之后出现严重性一词的次数
请不要笑得太厉害:
cat <file> | sed '1,/vulnerabilities/d' | grep -c '"severity": 4'
这将返回“严重性”计数:文件中有 4 个匹配项。我似乎无法在其他文件中迭代它。
我有 100 个左右的文件,格式为 bleeblah-082017。 bleeblah 可以是不同的长度和单词。我在如何轻松地从上面的一个文件中迭代以从每个文件中获取结果时遇到问题。
我通常会使用 awk 行来遍历列表,但我似乎找不到任何融合 awk 和 sed 的示例。
有人对如何在多个文件上执行上述任务并返回每个文件的结果有任何想法吗?
谢谢 戴维
我有一个包含大量条目的文件,例如:
{
“计数”:6,
"plugin_family": "杂项",
“plugin_id”:7467253,
"plugin_name": "废话",
“严重性”:4,
“severity_index”:1,
“vuln_index”:13
我想提取时间“严重性”:4 出现在每个文件中的漏洞一词之后。输出将是 10
更多的输入文件。
"notes": null,
"remediations": {
"num_cves": 20,
"num_hosts": 6,
"num_impacted_hosts": 2,
"num_remediated_cves": 6,
"remediations": [
{
"hosts": 2,
"remediation": "Apache HTTP Server httpOnly Cookie Information Disclosure: Upgrade to Apache version 2.0.65 / 2.2.22 or later.",
"value": "f950f3ddf554d7ea2bda868d54e2b639",
"vulns": 4
},
{
"hosts": 2,
"remediation": "Oracle Application Express (Apex) CVE-2012-1708: Upgrade Application Express to at least version 4.1.1.",
"value": "2c07a93fee3b201a9c380e59fa102ccc",
"vulns": 2
}
]
},
"vulnerabilities": [
{
"count": 6,
"plugin_family": "Misc.",
"plugin_id": 71049,
"plugin_name": "SSH Weak MAC Algorithms Enabled",
"severity": 1,
"severity_index": 0,
"vuln_index": 15
},
{
"count": 6,
"plugin_family": "Misc.",
"plugin_id": 70658,
"plugin_name": "SSH Server CBC Mode Ciphers Enabled",
"severity": 1,
"severity_index": 1,
"vuln_index": 13
},
{
"count": 2,
"plugin_family": "Web Servers",
"plugin_id": 64713,
"plugin_name": "Oracle Application Express (Apex) CVE-2012-1708",
"severity": 2,
"severity_index": 2,
"vuln_index": 12
},
这些文件中的每一个都来自从我的扫描仪 API 中提取的漏洞扫描。本质上,严重性这个词在不同方面(主机、漏洞等)无处不在。我想从每个扫描文件中提取模式在漏洞一词之后出现的次数(每个文件中只出现一次)。开放使用 perl python 来实现这一点。过去只是更熟悉使用 shell 脚本来操作这些文本类型文件。
【问题讨论】:
-
我真的不完全清楚你想要达到的目标,因为你的第一个陈述有点模棱两可。我可以建议您包含一个(小)示例输入文件和您期望的输出吗?
-
我也不明白你的问题。该行是 JSON。您最好使用 Perl 或 Python 来解析(并可能过滤它)它。至少一个单行使其成为多行。您在谈论“遍历列表”-
<file>是否在每一行中都包含这些 JSON 对象?并且:“融合 awk 和 sed”您可以单独使用awk进行任何 sed 操作。显示一个包含单词“vulnerabilities”的示例<file>。 -
添加更多上下文输入行
标签: bash awk sed pattern-matching