使用 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/'
使用 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/'