我有两个.txt文件" test1.txt"和" test2.txt"我想使用逆grep(UNIX)来查找test2.txt中不包含test1.txt中任何行的所有行
test1.txt仅包含用户名,而test2.txt包含更长的文本字符串。我只希望test2.txt中的行不包含test1.txt中找到的用户名
它会是什么样的?
grep -v test1.txt test2.txt > answer.txt
答案 0 :(得分:2)
你几乎在那里错过了你命令中的一个选项(即-f) 您的解决方案应使用-f标志,请参阅下面的示例会话以演示相同的
演示会议
$ # first file
$ cat a.txt
xxxx yyyy
kkkkkk
zzzzzzzz
$ # second file
$ cat b.txt
line doesnot contain any name
This person is xxxx yyyy good
Another line which doesnot contain any name
Is kkkkkk a good name ?
This name itself is sleeping ...zzzzzzzz
I can't find any other name
Lets try the command now
$ # -i is used to ignore the case while searching
$ # output contains only lines from second file not containing text for first file lines
$ grep -v -i -f a.txt b.txt
line doesnot contain any name
Another line which doesnot contain any name
I can't find any other name
Lets try the command now
答案 1 :(得分:0)
你使用什么样的unix?这将使我们从命令行更好地了解您可以使用的内容。目前你所拥有的东西不起作用,你正在寻找比较两个文件的diff
命令。
您可以在OS X 10.6上执行以下操作。我已在家中对此进行了测试。
diff -i -y FILE1 FILE2
diff
比较文件-i
会忽略这种情况,如果这无关紧要,那么Hi和HI仍然意味着相同。最后-y
将并排输出结果如果您想将信息输出到文件,您可以diff -i -y FILE1 FILE2 >> /tmp/Results.txt
答案 2 :(得分:0)
他们可能是更好的方法来做到这一点,即。没有grep但是会有一个可行的解决方案
grep -v -P "($(sed ':a;N;$!ba;s/\n/)|(/g' test1.txt))" test2.txt > answer.txt
解释一下:
$(sed ':a;N;$!ba;s/\n/)|(/g' test1.txt)
是一个嵌入式sed命令,它输出一个字符串,其中test1.txt中的每个换行符都被)|(
替换,然后将输出插入到perl样式的正则表达式(-P
)中要使用grep,以便grep在text1.txt中的每一行搜索test2.txt,并仅返回test2.txt中由于-v
param而在test1.txt中不包含行的那些。