如何在Unix中查找ls输出的文件名是否存在于指定文件中
核对当前目录文件与test.txt列表的方法
我来给你几个实用的命令,帮你快速找出当前目录中存在且出现在test.txt里的文件:
方法1:用grep直接匹配
这是最直观的方式,把当前目录的文件列表传给grep,让它匹配test.txt里的文件名:
ls | grep -Fxf test.txt
-F:把test.txt里的内容当作固定字符串(避免正则表达式的干扰)-x:只匹配整行内容(防止部分文件名匹配,比如避免v1.txt误匹配到v11.txt)-f:从test.txt中读取要匹配的模式列表
如果需要忽略文件名的大小写(比如让V1.txt和v1.txt被视为同一个),只需加个-i参数:
ls | grep -Fxfi test.txt
方法2:用comm命令对比有序列表
comm命令专门用来比较两个有序文件的内容,我们可以先把当前目录的文件列表和test.txt都排序后再对比:
comm -12 <(ls | sort) <(sort test.txt)
-12:只保留两个列表中都存在的行<():进程替换,把命令输出当作临时文件来处理sort:确保两个列表的顺序一致,让comm能正确对比
同样,如果要忽略大小写,排序时加上-f参数:
comm -12 <(ls | sort -f) <(sort -f test.txt)
小提示:清理test.txt的无效内容
如果test.txt里有空行或者多余的空格,可以先过滤掉再进行匹配,比如:
ls | grep -Fxf <(grep -v '^$' test.txt)
这里grep -v '^$'会去掉test.txt里所有空行。
内容的提问来源于stack exchange,提问作者user1373805
相关产品推荐
相关产品推荐

