Command-Substitution

比較兩個數據流而不將兩者都儲存為文件

  • November 8, 2019

我有這兩個文件:-

[root@localhost base_filters]# cat aix_old
joe
amadeus
image
bill
juliet
charlie
romeo
ftp


[root@localhost base_filters]# cut -d: -f1 passwd2
henry
amadeus
image
bill
julie
jennifer
charlie
romeo
harry

我正在嘗試找出兩個文件之間的差異;所以我使用以下命令: -

[root@localhost base_filters]# cut -d: -f1 passwd2 | sort | diff `sort aix_old` -

但收到以下錯誤:

diff: extra operand `charlie'
diff: Try `diff --help' for more information.

我知道我可以使用另一個臨時文件對內容進行排序,aix_old但我不想要另一個臨時文件;所以嘗試了命令替換。

任何想法,我可能做錯了什麼。

對於 ksh、zsh 或 bash,使用程序替換:

diff <(cut -d: -f1 passwd2 | sort) <(sort aix_old)

給出:

4,5c4
< harry
< henry
---
> ftp
7,8c6,7
< jennifer
< julie
---
> joe
> juliet
diff -y <(cut -d: -f1 passwd2 | sort) <(sort aix_old)

給出:

amadeus                              amadeus
bill                                bill
charlie                             charlie
harry                                 | ftp
henry                                 <
image                               image
jennifer                              | joe
julie                                 | juliet
romeo                               romeo

來自過程替代維基:http ://en.wikipedia.org/wiki/Process_substitution

Unix diff 命令通常接受要比較的兩個文件的名稱,或者一個文件名和標準輸入。程序替換允許您直接比較兩個程序的輸出:

$ diff <(排序文件1) <(排序文件2)

&lt;(command)表達式告訴命令解釋器執行命令並使其輸出顯示為文件。該命令可以是任意複雜的 shell 命令。

同樣使用yash 的程序重定向(在帶有 的系統上/dev/fd/n):

diff /dev/fd/3 3&lt;(cut -d: -f1 passwd2 | sort) /dev/fd/4 4&lt;(sort aix_old)

或者更麻煩的是使用任何類似 Bourne 的 shell(在帶有 的系統上/dev/fd/n):

cut -d: -f1 passwd2 | sort | {
 sort aix_old 3&lt;&- | diff /dev/fd/3 -
} 3&lt;&0

引用自:https://unix.stackexchange.com/questions/72454