bash - grep 两次或一次正则表达式效率更高吗?

标签 bash unix grep

我正在尝试解析几个 2gb 以上的文件,并希望在几个级别上进行 grep。

假设我想获取包含“foo”的行和也包含“bar”的行。

我可以做 grep foo file.log | grep bar,但我担心运行两次会很昂贵。

改用 grep -E '(foo.*bar|bar.*foo)' 这样的东西会有好处吗?

最佳答案

grep -E '(foo|bar)' 将查找包含“foo”“bar”的行。

您需要包含BOTH 'foo' AND 'bar' 的行。这些命令中的任何一个都可以:

sed '/foo/!d;/bar/!d' file.log

awk '/foo/ && /bar/' file.log

这两个命令——理论上——应该比你的cat |搜索引擎优化 | grep 构造因为:

  • sedawk 都执行它们自己的文件读取;无需管道开销
  • 我给上面的 sedawk 的“程序”使用 bool 短路来快速跳过不包含“foo”的行,因此只测试包含“foo”的行' 到/bar/正则表达式

但是,我还没有测试过它们。 YMMV :)

关于bash - grep 两次或一次正则表达式效率更高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040429/

相关文章:

regex - 使用删除

linux - mac上的常用命令行

python - pip installrequirements.txt 无法正常工作

c++ - 用 C++ 重写 grep

linux - 获取最新的日志文件并存储在变量中

linux - Openssl 不工作,目录/etc/ssl 丢失

linux - 如何在 Bash 脚本中使用 Awk [有问题]?

linux - Jenkins 向 bash shell 脚本添加单引号

c - C 进程的微观管理内存使用

grep 最后一场比赛及其以下几行