Ank*_*kit 7 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
Run Code Online (Sandbox Code Playgroud)
我试图找出两个文件之间的差异;所以我使用以下命令:-
[root@localhost base_filters]# cut -d: -f1 passwd2 | sort | diff `sort aix_old` -
Run Code Online (Sandbox Code Playgroud)
但是收到以下错误:
diff: extra operand `charlie'
diff: Try `diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用另一个临时文件来对内容进行排序,aix_old
但我不想要另一个临时文件;所以尝试了命令替换。
任何想法,我可能做错了什么。
Vin*_*ent 16
使用 ksh、zsh 或 bash,使用进程替换:
diff <(cut -d: -f1 passwd2 | sort) <(sort aix_old)
Run Code Online (Sandbox Code Playgroud)
给出:
4,5c4
< harry
< henry
---
> ftp
7,8c6,7
< jennifer
< julie
---
> joe
> juliet
Run Code Online (Sandbox Code Playgroud)
diff -y <(cut -d: -f1 passwd2 | sort) <(sort aix_old)
Run Code Online (Sandbox Code Playgroud)
给出:
amadeus amadeus
bill bill
charlie charlie
harry | ftp
henry <
image image
jennifer | joe
julie | juliet
romeo romeo
Run Code Online (Sandbox Code Playgroud)
来自流程替换维基: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)
Run Code Online (Sandbox Code Playgroud)
或者更麻烦地使用任何类似 Bourne 的 shell(在带有 的系统上/dev/fd/n
):
cut -d: -f1 passwd2 | sort | {
sort aix_old 3<&- | diff /dev/fd/3 -
} 3<&0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4559 次 |
最近记录: |