Command-Substitution
比較兩個數據流而不將兩者都儲存為文件
我有這兩個文件:-
[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)
該
<(command)
表達式告訴命令解釋器執行命令並使其輸出顯示為文件。該命令可以是任意複雜的 shell 命令。同樣使用yash 的程序重定向(在帶有 的系統上
/dev/fd/n
):diff /dev/fd/3 3<(cut -d: -f1 passwd2 | sort) /dev/fd/4 4<(sort aix_old)
或者更麻煩的是使用任何類似 Bourne 的 shell(在帶有 的系統上
/dev/fd/n
):cut -d: -f1 passwd2 | sort | { sort aix_old 3<&- | diff /dev/fd/3 - } 3<&0