【问题标题】: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 读取文件中 pattern1 的日志并仅打印包含 pattern1 的行。在文件中找到 pattern2 时停止搜索
【发布时间】:2015-04-25 18:53:13
【问题描述】:

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

我不想要 pattern1 和 pattern2 的范围之间的界限,在这个站点中有很多解决方案。请帮忙。

我尝试了以下没有结果:

adb logcat | grep -i '模式1' | grep -m 1 '模式2'

看起来 '|' 使它成为 AND condition 并且我正在寻找的字符串不在同一行。它们位于不同的行中。

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

【问题讨论】:

    标签: android python awk sed grep


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 后续问题。给定的解决方案在终端中运行良好,但是当我在 Python 脚本中使用它时,找到 pattern2 时它似乎并没有退出。
    • 请发布一个新问题,解释您如何尝试在 python 中使用命令行,您期望它做什么以及实际发生了什么。您可以在新问题中添加指向该问题的链接。
    【解决方案2】:

    只需调用 sed 即可完成:

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

    或者,这可以通过调用awk来完成:

    adb logcat | awk '/pattern2/{exit} /pattern1/'
    

    【讨论】:

    • 后续问题。给定的 awk 解决方案在终端中运行良好,但是当我在 Python 脚本中使用它时,找到 pattern2 时它似乎并没有退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多