2018-05-03 diff比较管道输入,标准输出

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

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

<(...) 语法创建一个临时命名管道,这使得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:])

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容