2013-09-25 43 views
3

例如,如果我想在使用sed預處理兩個文件之後執行兩個文件的diff,有沒有辦法在沒有臨時文件的情況下執行此操作?在bash中,有沒有一種方法有多個管道到一個進程?

我已經試過這樣的事情,並(如我所料),它沒有工作:

(sed "$expr" file1; sed "$expr" file2) | diff - - 

我想有可能是一種方式來明確什麼的創建管道。

+0

如果您發佈文件,我們可以幫助你做出一個awk命令該做的一切。 – Jotne

回答

5

嘗試這樣做:

diff <(sed "$expr" file1) <(sed "$expr" file2) 

它使用進程替換<()被替換爲臨時文件名。寫入或讀取該文件會導致字節被傳送到內部的命令中。結合常與文件重定向:

cmd1 2> >(cmd2) 


http://mywiki.wooledge.org/ProcessSubstitution
http://mywiki.wooledge.org/BashFAQ/024

+0

謝謝,那就是我一直在尋找的! – Matt

+0

在'cmd1 <(cmd2)'中,管道持續多長時間? cmd1退出後會立即關閉嗎? – Matt

+1

好問題。在'cmd2 |中cmd1','cmd2'可以在'cmd1'退出後繼續,只要它不嘗試寫入封閉的管道。流程替換可能類似地工作。 – chepner

相關問題