我有两个文件(没有空行/空格/制表符)
/tmp/全部
aa
bb
cc
hello
SearchText.json
xyz.txt
/tmp/必需
SearchText.json
我想要的最终输出是:(来自 /tmp/all 的所有不常见行)
aa
bb
cc
hello
xyz.txt
我尝试过以下命令:-
# comm -23 /tmp/required /tmp/all
SearchText.json
# comm -23 /tmp/all /tmp/required
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -13 /tmp/all /tmp/required
SearchText.json
# comm -13 /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# grep -vf /tmp/all /tmp/required
# grep -vf /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -23 <(sort /tmp/all) <(sort /tmp/required)
aa
bb
cc
hello
SearchText.json
xyz.txt
答案1
作为 的替代方案comm
,请考虑grep
:
grep -vxFf /tmp/required /tmp/all
这要求文件 () 中不存在 ()的/tmp/all
行。为了避免将任何行解释为正则表达式,我添加了“固定字符串”标志。此外,我们希望强制输入的整行与中的行匹配,因此我们使用该选项。-v
-f
/tmp/required
/tmp/all
-F
/tmp/all
/tmp/required
-x
此方法不需要排序的输入。
comm -23 <(sort ...) <(sort ...)
如果“SearchText.json”行匹配,我怀疑你的命令会起作用确切地在两个文件中(相同数量的尾随空格,如果有的话)。