我有两个列表,一个完整列表和一个部分列表。我想要一个 bash 脚本,它将在完整列表中搜索部分中的任何行,如果有,它们将从完整列表中删除。任何人都可以帮忙吗?
Gil*_*il' 23
grep
可以从文件中读取多个模式,每行一个。结合选项-v
输出不匹配的行,-F
匹配字符串而不是正则表达式,并-x
要求整行匹配。
grep -Fvx -f partial.list complete.list >remaining.list &&
mv remaining.list complete.list
Run Code Online (Sandbox Code Playgroud)
显然,第二个命令行仅在您想覆盖包含完整列表的文件时使用。
如果部分列表很大并且您不介意重新排序列表,那么join
可能会更快。
小智 14
你也可以使用 -
comm -23 file1 file2
Run Code Online (Sandbox Code Playgroud)
必须对文件进行排序,命令才能正常工作。文件 2 中的条目将从命令输出中的文件 1 中删除
如果两个列表都没有重复元素,则以下操作将起作用:
join -t$'\n' -v1 <(sort complete) <(sort partial)
Run Code Online (Sandbox Code Playgroud)
如果列表可以包含重复元素,而您只想忽略重复,则可以使用-u
sort 子命令中的标志,它只会输出唯一元素。