bash 删除两个文件中的公共行

bash 删除两个文件中的公共行

我有两个文件(没有空行/空格/制表符)

/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”行匹配,我怀疑你的命令会起作用确切地在两个文件中(相同数量的尾随空格,如果有的话)。

相关内容