在 Linux 中,你可以使用 grep、awk 或 comm 命令来找出 b.txt 中存在但 a.txt 中不存在的行,并打印到终端。以下是几种方法:
方法 1:使用 grep(推荐)
grep -vxFf a.txt b.txt解释:
-v:反向匹配,显示不匹配的行。-x:整行匹配(避免部分匹配)。-F:将模式视为固定字符串(而非正则表达式,提高速度)。-f a.txt:从a.txt读取匹配模式。b.txt:要搜索的文件。
示例:
$ cat a.txt
apple
banana
orange
$ cat b.txt
banana
grape
orange
pear
$ grep -vxFf a.txt b.txt
grape
pear方法 2:使用 awk
awk 'NR==FNR {a[$0]; next} !($0 in a)' a.txt b.txt解释:
NR==FNR:处理第一个文件(a.txt)时,记录所有行到数组a。next:跳过后续操作,继续读取a.txt。!($0 in a):处理第二个文件(b.txt)时,如果当前行不在数组a中,则打印。
示例:
$ awk 'NR==FNR {a[$0]; next} !($0 in a)' a.txt b.txt
grape
pear方法 3:使用 comm(需先排序)
comm -23 <(sort b.txt) <(sort a.txt)解释:
comm:比较两个已排序的文件。-23:-2:隐藏a.txt独有的行。-3:隐藏两个文件共有的行。最终只显示
b.txt独有的行。
<(sort ...):进程替换,先对文件排序。
示例:
$ comm -23 <(sort b.txt) <(sort a.txt)
grape
pear总结
推荐使用 grep 方法,因为它最简单且性能较好。