使用 grep 读取文件中 pattern1 的日志并仅打印包含 pattern1 的行。当在文件中找到 pattern2 时停止搜索

Using grep to read a log for pattern1 in the file and print only lines containing pattern1. Stop searching when pattern2 is found in the file

使用 grep/sed/awk 我想搜索 pattern1 直到在文件中找到 pattern2 并打印仅包含 pattern1 的结果。

我不想要 pattern1 和 pattern2 范围之间的线条,对此站点中有很多解决方案。请帮忙。

我尝试了以下但没有结果:

亚行 logcat | grep -i 'pattern1' | grep -m 1 'pattern2'

看起来 '|' 使它成为 AND condition 而我要查找的字符串不在同一行中。他们在不同的行。

更新:解决方案在终端中有效,但在脚本中无效。有人可以帮助找出为什么它在脚本中不起作用吗?

找到 pattern2 后使用 sed 停止打印:

adb logcat | sed  '/pattern2/q' | grep -i 'pattern1'

或者使用 sed 打印 pattern1 并在 pattern2 之后退出:

adb logcat | sed  -n '/pattern1/p;/pattern2/q'

只需一次调用 sed 即可完成:

adb logcat | sed -n '/pattern2/q; /pattern1/p'

或者,这可以通过一次调用 awk:

来完成
adb logcat | awk '/pattern2/{exit} /pattern1/'