在logcat上优化sed



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

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

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

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

无用的grep有很好的文档记录,很容易清除。

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

为了简单地重申链接的网页,任何看起来像grep 'x' | sed 'y'的内容都可以重构为sed '/x/y'(类似地,grep 'x' | awk 'y'可以简化为awk '/x/ y'(。sed和Awk都是通用的regex工具,可以完成grep所能做的一切(尽管公平地说,一些复杂的grep选项在sed或Awk脚本中重新实现是乏味的;但这显然不是其中之一(。

然而,*arg*不是一个定义良好的正则表达式;所以我得猜一猜你到底是什么意思。

正则表达式开头的*定义不明确;但是许多CCD_ 16实现将其理解为字面上的星号。如果这不是你的意思,也许可以去掉第一个\*
  • CCD_ 18与CCD_;如果您不关心匹配后是否有g字符,请不要指定它们。但也许你的意思是arg后面跟着什么
  • 但我猜你的意思可能只是arg(隐含地在前面和后面有任何内容(
  • 如果还不清楚,*在正则表达式中不是通配符。相反,它说尽可能多次重复前面的表达式,为零或更多(因此regex中说"任何字符串"的方式是.*,即"任何字符(换行符除外(";通配符.重复零次或多次(。

    此外,grep(以及sed和Awk(在一行中的任何位置查找正则表达式(除非您放入显式正则表达式锚点或使用grep -xsed或Awk中的等效选项(,因此您不需要指定";前面有任何";或";后面跟着任何东西";。

    The Bash";C样式字符串";$'...'提供了一些便利,但也要求任何文字反斜杠都要加倍。所以$'/\*/'等价于普通单引号中的'/*/'

    sed减慢速度的原因可能是缓冲,但去掉无用的grep也恰好去掉了缓冲。

    相关内容

    • 没有找到相关文章

    最新更新