[小技巧] 使用 diff 命令来比较标准输出

本文翻译至:https://crashingdaily.wordpress.com/2008/03/06/diff-two-stdout-streams/

diff工具用于报告两个文件之间的差异,如果你需要找到一个或两个标准输出之间的差异,那么临时的命名管道是一个方便的手段。
下面是用bash shell来说明该技巧的一个简单的例子,你有两个文件,A和B:
$ cat A
Tara
Dawn
Anya
Willow


$ cat B
WILLOW
ANYA
DAWN
HARMONY
TARA


我们的任务是发现两个列表之间的差异,而无需创建新文件或编辑现有文件。为此,您可以通过sort和tr来规范字母的大小写,然后使用diff来实时检查标准输出。


$ diff -B <(sort A | tr [:lower:] [:upper:])  <(sort B | tr [:lower:] [:upper:])


2a3
> HARMONY


<(...) 语法创建一个临时命名管道,这使得sort | tr 命令的标准输出像一个文件一样显示和动作,并允许diff对预期的输入类型进行操作。


为了好玩,你可以看到在进程中创建的临时文件:


dir <(sort A | tr [:lower:] [:upper:])
lr-x------ 1 crash daily 64 Mar 5 23:17 /dev/fd/63 -> pipe:[21483501]


这种技巧不限于diff。它也支持大多数以文件作为输入的命令。


有趣的是(令人沮丧的),在我的Mac OS X上的BASH shell它无法动作,有人知道为什么吗?更新:的确有人知道。Unixjunkie里有回答。下列的处理在OS X可以产生预期的输出,但试了用diff却不产生输出。
cat <(sort A | tr [:lower:] [:upper:]) <(sort B | tr [:lower:] [:upper:])


ANYA
DAWN
TARA
WILLOW


ANYA
DAWN
HARMONY
TARA
WILLOW


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值