bash - 如何删除反向 grep 匹配上方和下方的行?

标签 bash sed awk grep command-line-interface

我正在处理一些比我想要的更详细的输出,所以我尝试使用 grep 来减少它。输出看起来像这样......

path/to/file1:
No Problems Found

path/to/file3:
Problem Found

我想毫无问题地过滤掉所有有关文件的输出。我可以通过将输出通过 grep -v "No Problems Found" 来删除其中的一行。 。我想我就可以按照 grep -B 1 -A 1 -v "No Problems Found" 的方式使用 -B 和 -A但事实证明,当与 -v 结合使用时,它们不会反转。

导出文件后,我可以在 Vim 中快速修改输出,但如果可以的话,我想直接在命令行上执行此操作。有任何想法吗?对于 Awk 或 Sed 来说,这是更好的工作吗?

最佳答案

awk -v RS= -v ORS='\n\n' '/No Problems Found/' file

awk -v RS= -v ORS='\n\n' '!/Problem Found/' file

关于bash - 如何删除反向 grep 匹配上方和下方的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961661/

相关文章:

mysql - 在 csv 文件中动态编辑列表

linux - awk - 使用 printf 仅格式化一个输出字段?

bash - 如何使用正则表达式分隔符获取第 n 列

linux - 如何使用shell解析命令的输出

bash - 如何在 Action 运行的 Bash 脚本中访问 GitHub Action 环境变量?

linux - 在 linux 的 "local"工具链上

linux - sed:删除包含字符类的整个单词

bash - 仅抓取文件所有行中第四个和第七个下划线之间的文本/子字符串

linux - 如何找到调度策略和事件进程的优先级?

linux - 基于分隔符的合并记录 - Linux