是否可以对STDOUT进行分页?

时间:2013-12-05 14:57:52

标签: linux shell file-io split stdin

是否可以拆分STDIN(或STDOUT),以便管道中的下一个程序可以将流解释为多个文件?

具体来说,我想将git log -p输出拆分为寻呼机less中的单个提交,就好像我已经使用多个文件启动它并且可以:n通过提交,因此它更清楚一个结束,另一个结束。

1 个答案:

答案 0 :(得分:1)

不确定是否可以实际拆分stdout

但是,实现所需内容的一种方法是在某种模式(例如git log -p)上拆分commit输出的文件,然后形成一组代表每次提交的文件。然后可以按顺序浏览这些文件。您需要使用csplit命令进行拆分:

csplit -zqf "commit-" <(git log -p) '/^commit /' '{*}' && less commit-*

这会尝试将正则表达式模式上的git命令输出分割任意次数 - 因此{*} - 并且对于每个匹配将结果放在一个文件中。生成的文件(如果有)的格式为commit-n,并在当前目录中创建。然后可以使用less从最新提交到最旧提交按顺序浏览它们。

要完全了解csplit选项,请查找man csplit