【发布时间】:2018-11-20 14:34:12
【问题描述】:
我正在尝试为字符串 a、b 和 c grep 3 个字段。我知道这可以通过
grep -E 'a|b|c'
但是,我还想对字符串 x、y 和 z 进行 grep,包括以下行。我知道这可以通过
grep -A1 'x'
所以我的问题是,是否可以将所有这些组合成一个命令?例如。类似的东西(我知道这个命令不起作用,只是一个例子)
grep -E 'a|b|c' -A1 'x|y|z'
如果有没有 grep 的更好方法,或者甚至使用 python 会有所帮助,我只是求助于使用 grep,因为我认为它比使用 python 逐行读取文件更快。干杯!
编辑: 所以我有一个包含重复部分的大文件,它看起来像这样:
{
"source_name": [
"$name"
],
"source_line": [
52
],
"source_column": [
1161
],
"source_file": [
"/somerandomfile"
],
"sink_name": "fwrite",
"sink_line": 55,
"sink_column": 1290,
"sink_file": "/somerandomfile",
"vuln_name": "vuln",
"vuln_cwe": "CWE_862",
"vuln_id": "17d99d109da8d533428f61c430d19054c745917d0300b8f83db4381b8d649d83",
"vuln_type": "taint-style"
}
{} 之间的这一部分在文件中重复。所以我要grep的是source_name、source_line和source_file下面的行以及vuln_name、sink_file和sink_line。所以样本输出应该是:
"source_name": [
"$name"
"source_line": [
52
"source_file": [
"/somerandomfile"
"sink_line": 55,
"sink_file": "/somerandomfile",
"vuln_name": "vuln",
【问题讨论】:
-
为什么需要组合这些命令?
-
@JonahBishop 通过让输出彼此跟随而不是被拆分,让我的生活变得更轻松。如果这有任何意义
-
试试
grep -Poz 'a|b|c|(x|y|z).*\R.*' file