如何解决在 logcat 上优化 sed
我一直在一些 logcat 输出上使用 grep
和 sed
以使其更具可读性,我注意到我的输出明显比 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 举报,一经查实,本站将立刻删除。