如何在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机器上的非操作系统软件包列表
注意:这与在这里提出的问题类似,但并不相同(例如,不是一个愚蠢的): 单向差异文件
如何在给定的时间间隔运行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] 举报,一经查实,本站将立刻删除。