首先我创建两个文件:
echo -en {1..100..3}"\n" > file1; echo -en {1..100..5}"\n" > file2
然后
grep -v -F -f file1 -- file2 >> file3; cat file3 >> file1; rm file3
然后
grep -v -F -f file2 -- file1 >> file3; cat file3 >> file2; rm file3
grep -v -F -f file1 -- file2
并grep -v -F -f file2 -- file1
不返回任何内容
但是像13,19,64,67,100这样的数字仍然只在file1中,为什么?
如果你看一下grep -v -F -f file1 -- file2
的输出和
在合并尝试之前grep -v -F -f file2 -- file1
这些数字是
如果我使用像IFS=$(echo -en "\n\b") && for a in $(cat <file 1>); do ((\!$(grep -F -c -- "$a" <file 2>))) && echo $a; done && unset IFS
这样的东西,那就行了。
更新答案是将-x标志添加到grep进行锚定,感谢Tripleee:
$ echo -en {1..100..3}"\n" > file1; echo -en {1..100..5}"\n" > file2
$ grep -x -v -F -f file1 -- file2 >> file3; cat file3 >> file1; rm file3
$ grep -x -v -F -f file2 -- file1 >> file3; cat file3 >> file2; rm file3
$ grep 13 *
file1:13 file2:13
之前没有
$ echo -en {1..100..3}"\n" > file1; echo -en {1..100..5}"\n" > file2
$ grep -v -F -f file1 -- file2 >> file3; cat file3 >> file1; rm file3
$ grep -v -F -f file2 -- file1 >> file3; cat file3 >> file2; rm file3
$ grep 13 *
file1:13
答案 0 :(得分:2)
使用-w告诉grep比较单词实现正确的合并。
我用你的例子文件做了这样的测试:
grep -v -w -f file1 file2 >> file1
grep -v -w -f file2 file1 >> file2
grep -v -w -f file1 file2
为了确保我对文件进行了排序:
sort -h file1 > f1
sort -h file2 > f2
并且diff -u f1 f2
没有给出任何内容我确保diff -y f1 f2
如果您可以详细说明您的用例,我可以改进这个答案。
如果您正在谈论tittle中的行,则-x标志而不是-w可能是您正在寻找的内容。
答案 1 :(得分:0)
如果没有锚定,只要搜索模式是输入的子字符串,grep
就会找到匹配项。添加-x
选项以更改它。然后只有在模式匹配整个输入行时才会报告匹配。