找到两个文本文件之间的差异,每行一个项目

veh*_*zzz 77 bash scripting awk sed file

我有两个文件:

档案1

dsf
sdfsd
dsfsdf
Run Code Online (Sandbox Code Playgroud)

档案2

ljljlj 
lkklk 
dsf
sdfsd
dsfsdf
Run Code Online (Sandbox Code Playgroud)

我想显示文件2中的内容,但不显示文件1中的内容,因此文件3应该如下所示

ljljlj 
lkklk 
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 139

grep -Fxvf file1 file2
Run Code Online (Sandbox Code Playgroud)

标志意味着什么:

-F, --fixed-strings
              Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.    
-x, --line-regexp
              Select only those matches that exactly match the whole line.
-v, --invert-match
              Invert the sense of matching, to select non-matching lines.
-f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file contains zero patterns, and therefore matches nothing.
Run Code Online (Sandbox Code Playgroud)

  • 可以添加选项`-n`来对不同的行进行编号 (2认同)

kri*_*ico 51

你可以试试

grep -f file1 file2
Run Code Online (Sandbox Code Playgroud)

要么

grep -v -F -x -f file1 file2
Run Code Online (Sandbox Code Playgroud)

  • 你可以用`grep -F -x`修复它 (5认同)
  • 这不行.尝试将`dsfblah`添加到file2. (4认同)
  • 我认为您的建议值得编辑@tripleee (2认同)
  • 请注意,文件的顺序很重要。我正在尝试检测文件的新增内容。我必须写 `grep -v -f oldfile newfile` 否则它不会输出任何内容。 (2认同)
  • 想象一下我: git add file1. git 提交。cat 文件 2 > 文件 1. git 差异。 (2认同)

dog*_*ane 39

您可以使用该comm命令比较两个已排序的文件

comm -13 <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,它实际上是`comm -1 -3 file1 file2`.两个标志"1"和"3"合并为一个. (3认同)

Luc*_*one 12

我成功使用了

diff "${file1}" "${file2}" | grep "<" | sed 's/^<//g' > "${diff_file}"
Run Code Online (Sandbox Code Playgroud)

将差异输出到文件.


Nat*_*ate 8

如果你按照一定的顺序期待它们,你可以使用 diff

diff file1 file2 | grep ">"


Pau*_*ce. 6

join -v 2 <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)