微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 logcat 上优化 sed

如何解决在 logcat 上优化 sed

我一直在一些 logcat 输出上使用 grepsed 以使其更具可读性,我注意到我的输出明显比 grep 输出慢。>

我知道 sed 显然会增加更多的运行时间,但我想检查是否有任何优化技术。

我的命令看起来像这样以供参考:

adb logcat | grep arg | sed $'s/{/\\\n{/g

解决方法

useless grep 有据可查且易于删除。

adb logcat | sed $'/\\*arg/s/{/\\\n{/g'

简单地重申链接的网页,任何看起来像 grep 'x' | sed 'y' 的东西都可以重构为 sed '/x/y'(对于 grep 'x' | awk 'y' 也是如此,它简化为 awk '/x/ y')。 sed 和 Awk 都是通用的正则表达式工具,可以完成 grep 可以做的所有事情(尽管公平地说,一些复杂的 grep 选项在 sed 或 Awk 脚本中重新实现很乏味;但这显然不是这些情况之一)。

然而,*arg* 不是一个定义明确的正则表达式;所以我得猜你的意思。

    正则表达式开头的
  • * 没有明确定义;但许多 grep 实现会将其理解为字面的星号。如果这不是您的意思,请去掉第一个 \\*
  • arg* 完全等同于 ar;如果您不在乎匹配后是否有 g 个字符,则不要指定它们。但也许您的意思是 arg 后跟任何东西?
  • 但我猜你的意思可能只是 arg(隐式前面和后面是任何东西)。

如果不是很明显,* 不是正则表达式中的通配符。相反,它说尽可能多地重复前面的表达式,零次或多次(因此在正则表达式中说“任何字符串”的方式是.*,即“任何字符(换行符除外)”通配符 . 重复零次或多次)。

此外,grep(以及 sed 和 Awk)会在一行中的任何位置查找正则表达式(除非您放置了显式正则表达式锚点或使用 grep -x 或 {{ 1}} 或 Awk),因此您无需指定“前面有任何内容”或“后面有任何内容”。

Bash“C 样式字符串”sed 提供了一些便利,但也需要将任何文字反斜杠加倍。所以 $'...' 等价于常规单引号中的 $'/\\*/'

'/\*/' 减慢您速度的原因可能是 buffering,,但摆脱无用的 sed 也巧合地摆脱了缓冲。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。