利用 Ruby 实现 Shell 单行命令高效文本处理
在文本处理中,有时编写完整的脚本并非最佳选择。比如问题是临时的,不想保留解决方案;或者问题很简单,不值得写成文件;又或者处于解决方案的初步探索阶段。此时,能够直接从命令行处理文本就显得十分有利,而 Ruby 具备很多特性,能轻松融入这种工作流程。
1. 标准输出同步问题
在某些情况下,程序的输出可能会被缓冲,导致我们在程序结束前看不到任何输出。例如,填充一个 4096 字节的缓冲区可能只需几秒,而填充一个 65536 字节的缓冲区则需要长达两小时,这意味着在程序结束前我们看不到任何输出。
为避免这个问题,可以使用脚本的同步版本。以下是一个示例脚本 stdout-sync.rb :
$stdout.sync = true
100.times do
"hello world".each_char do |c|
print c
sleep 0.1
end
print "\n"
end
在这个脚本中,我们将 $stdout.sync 设置为 true ,这会告诉标准输出流不要缓冲,而是持续刷新。如果将这个脚本的输入通过管道传递给 cat ,我们会看到每隔 0.1 秒出现一个字符。虽然脚本的总执行时间不变,但管道中的下一个程序可以立即处理输出,有可能加快整个管道的处理时间。
2. 标准输入与文本处理管道
我们已经了解了如何使用标准输
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



