是否可以拆分STDIN(或STDOUT),以便管道中的下一个程序可以将流解释为多个文件?
具体来说,我想将git log -p
输出拆分为寻呼机less
中的单个提交,就好像我已经使用多个文件启动它并且可以:n
通过提交,因此它更清楚一个结束,另一个结束。
答案 0 :(得分:1)
不确定是否可以实际拆分stdout
。
但是,实现所需内容的一种方法是在某种模式(例如git log -p
)上拆分commit
输出的文件,然后形成一组代表每次提交的文件。然后可以按顺序浏览这些文件。您需要使用csplit
命令进行拆分:
csplit -zqf "commit-" <(git log -p) '/^commit /' '{*}' && less commit-*
这会尝试将正则表达式模式上的git命令输出分割任意次数 - 因此{*}
- 并且对于每个匹配将结果放在一个文件中。生成的文件(如果有)的格式为commit-n
,并在当前目录中创建。然后可以使用less
从最新提交到最旧提交按顺序浏览它们。
要完全了解csplit
选项,请查找man csplit
。