Ale*_*lex 8 performance sed files
我想过这个问题是否适合SE,希望你同意。
前段时间我在 SE 上询问如何在文件中查找文本,并只留下包含我正在搜索的文本的匹配行。问题在这里: 如何在文件中查找文本并仅使用 OS X 上的终端保留相应的匹配行?
虽然答案完美无缺,但我现在想知道,为什么sed这么快?在我的用例中,我有很多文件,总大小约为 30 Gb。该sed命令在大约 12 秒内运行,这是我永远不会相信的(使用普通硬盘驱动器)。在 12 秒内,该命令读取了 30 Gb 的文本,截断每个文件以仅保留我正在过滤的相应行。这是如何运作的?(或:这是什么魔法?)
实际命令是:
find . -type f -exec sed -i'' '/\B\/foobar\b/!d' {} \;
Run Code Online (Sandbox Code Playgroud)
可能的答案是:
sed是一个流编辑器;它一次只处理一行。这意味着它的内存占用很小。与emacs或等文本编辑器不同vim,它不需要在内存中维护文件的整个副本。-i),该文件(如@Ramesh 所示以及维基百科页面上所述)创建一个临时文件,然后该文件将成为旧文件。所有这些意味着sed能够执行几乎最少的文件操作:原始文件的每一行都被读取一次,并且只写入匹配的行。
您对正则表达式的选择也会影响性能,有时甚至会以非常糟糕的方式影响性能。:编码恐怖博客。