我正在尝试解析几个 2gb 以上的文件,并希望在几个级别上进行 grep 操作。
假设我想获取包含“foo”的行和也包含“bar”的行。
我可以这样做grep foo file.log | grep bar,但我担心运行两次会很昂贵。
使用类似的东西grep -E '(foo.*bar|bar.*foo)'代替会有好处吗?
grep -E '(foo|bar)'将找到包含“foo”或“bar”的行。
您想要包含“foo”和“bar”的行。这些命令中的任何一个都可以:
sed '/foo/!d;/bar/!d' file.log
awk '/foo/ && /bar/' file.log
Run Code Online (Sandbox Code Playgroud)
理论上,这两个命令应该cat | grep | grep比您的构造更有效,因为:
sed都awk执行各自的文件读取;无需架空管道sed和awk上面使用布尔短路来快速跳过不包含“foo”的行,从而仅测试包含“foo”到 /bar/ 正则表达式的行但是,我还没有测试过它们。嗯嗯:)
| 归档时间: |
|
| 查看次数: |
11778 次 |
| 最近记录: |