差异,仅显示正确文件中的修改行


24

我有文件ab并且我想输出b自从克隆以来更改的行a。仅修改的行,没有周围的上下文,没有diff偏移标记。

如何使用Shell脚本来做到这一点?(没有Python / Perl / PHP / ...)

Sed和awk是可接受的解决方案。

现在,我正在使用--suppress-common-lines diff -y并使用正则表达式反向引用sed来仅在空白之后获取正确的部分。肯定有更好的办法?

使用perl(这是被禁止的),我会做这样的事情:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'

Answers:


34

使用GNU diffutils软件包,diff它将仅输出文件b中已修改或新插入的行:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
太棒了 耻辱的信息是埋在Texinfo的,并没有暗示在手册页我正在读提供..
Robottinosino

6

您必须再添加一个选项:

grep -vf file1 file2

尽管这不需要对行进行排序,但我认为grep使用更多的内存,并且对于大型文件将崩溃。
Sridhar Sarnobat

如果行重复也行不通
Jayen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.