![grep 错误:重复运算符操作数无效](https://linux22.com/image/98664/grep%20%E9%94%99%E8%AF%AF%EF%BC%9A%E9%87%8D%E5%A4%8D%E8%BF%90%E7%AE%97%E7%AC%A6%E6%93%8D%E4%BD%9C%E6%95%B0%E6%97%A0%E6%95%88.png)
我试图比较两个文件,看看所有字符串(在这种情况下,行都很好,尽管它们没有排序)是否file1
存在于file 2
.
我做了一些研究,似乎该命令grep -v -f file1 file2
应该能够执行此操作,但是当我在命令行中尝试此操作时,我收到错误重复运算符操作数无效。
任何帮助将不胜感激,谢谢!
答案1
该错误消息表明,其中的一行或多行文件1不尊重正则表达式语法。如果您要按原样查找字符串而不是正则表达式,则应使用选项-F
(固定字符串)。
然而,真正的问题是您无法用于grep
您的目的,因为较短的行可能会错误地匹配较长的行。例如,如果文件1包含空行则该行将匹配全部行中文件2。
更好的方法是对文件进行排序并使用diff
:
TmpFile1=$(mktemp)
TmpFile2=$(mktemp)
sort $File1 >$TmpFile1
sort $File2 >$TmpFile2
# Display the lines in $File1 which do not appear in $File2
diff $TmpFile1 $TmpFile2 | grep '^>' | cut -c 3-
# Delete the temporary files
rm $TmpFile1 $TmpFile2