ico*_*ast 2 grep text-processing
有没有办法grep(实际上)结合grep -v和grep -A?也就是说,不是在字符串后包含x 行的所有内容,而是排除所有内容。
快速提醒那些忘记他们的 grep 开关的人:
cat file.txt | grep -v blah 过滤掉 'blah',
cat file.txt | grep -A7 foo 在每次出现 'foo' 后,正常 grep 的反面将显示 7 行
(是的,我知道cat这里没有必要。但我发现它更具可读性当您将许多grep语句串在一起以这种方式进行操作时。)
简单地说是
cat file.txt | grep -A100 bar | grep -vA100 foo
行不通的。“工作”将被定义为显示匹配 'bar' 的行和匹配 'foo' 的行之间的所有内容(最多 100 行)。
有bar一种foo使用 sed将所有块从 a 提取到 a的简单方法:
sed -n '/bar/,/foo/p'
Run Code Online (Sandbox Code Playgroud)
或使用 awk:
awk '/bar/, /foo/'
Run Code Online (Sandbox Code Playgroud)
如果你想截断块,它有点复杂(在 awk 中;在 sed 中要复杂得多)。这是一个解决方案:
awk -vmax_lines_per_chunk=100 '
/bar/ {n=max_lines_per_chunk}
/foo/ {if (n) print; n=0}
n {--n; print}
'
Run Code Online (Sandbox Code Playgroud)