微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Linux中做单向差异?

如何在Linux中做单向差异?

diff的正常行为:

通常情况下,差异会告诉你两个文件间的所有差异。 例如,它会告诉你文件A中不在文件B中的任何内容,并且还会告诉你文件B中的所有内容,而不是文件A中的所有内容。例如:

文件A包含:

在位于特定范围之间的命令中杀死具有特定值的进程

在使用-newermt时发现:无效谓词

Linux scsi命令队列

ncurses是一个很好的select,在Linux中的C程序中实现命令历史logging

Perl脚本来获取Python的版本

cat good dog one two

文件B包含:

cat some garbage one a whole bunch of garbage something I don't want to kNow

如果我按以下方式进行常规比较:

diff AB

输出将是这样的:

2c2 < good dog --- > some garbage 4c4,5 < two --- > a whole bunch of garbage > something I don't want to kNow

我在找什么:

我想要的只是第一部分,例如,我想知道文件A中的所有内容,但不是文件B.但是,我希望它忽略文件B中的所有内容,而不是文件A中的所有内容

我想要的是命令或一系列命令:

???? AB

产生输出

2c2 < good dog 4c4,5 < two

我相信一个解决scheme可以通过将diff的输出输出到sed或awk来实现,但是我不太熟悉这些工具来提供一个解决scheme。 我基本上想要删除所有以—和>开头的行。

编辑:我编辑的例子,以占一行上的多个单词。

注意:这是一个“子问题”: 确定安装在RedHat Linux机器上的非操作系统软件包列表

注意:这与在这里提出的问题类似,但并不相同(例如,不是一个愚蠢的): 单向差异文件

打印到命令提示符时增加命令提示符的长度

如何在Linux命令中引用前一个命令的输出两次?

如何在给定的时间间隔运行Unix命令?

如何在find命令的Linux中的{}参数上应用正则expression式

移动Windowsbatch file中的任何打开的应用程序的位置,而不使用nircmd实用程序

diff AB|grep '^<'|awk '{print $2}'

grep '^<'表示选择以<开头的行

awk '{print $2}'表示选择第二列

另一种方法是,如果你的文件只包含单行实体,而输出顺序无关紧要(问题的措词不清楚),那将是:

comm -23 <(sort A) <(sort B)

comm要求对其输入进行排序, -2表示“不显示对第二个文件唯一的行”, -3表示“不显示两个文件之间通用的行” 。

如果你需要按照它们出现的顺序来显示“差异”,尽管上面的diff / awk解决方案是可以的(尽管grep位并不是必须的 – 可能是diff AB | awk '/^</ { $1 = ""; print }' 。

编辑:固定哪一行报告 – 我最初读到它…

正如评论所述,一个最正确的答案是

diff AB | grep '^<'

尽管这会产生输出

< good dog < two

而不是

2c2 < good dog 4c4,5 < two

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐