我有一个文件名列表,如下所示:
tRapTrain.Isgf3g.2853.2.v1.primary.RC.txt tRapTrain.Yox1.txt
tRapTrain.Isgf3g.2853.2.v1.primary.txt tRapTrain.Ypr015c.txt
tRapTrain.Isgf3g.2853.2.v1.secondary.RC.txt tRapTrain.Yrm1.txt
tRapTrain.Isgf3g.2853.2.v1.secondary.txt tRapTrain.Zbtb12.2932.2.v1.primary.RC.txt
现在我需要选择带有primary.txt的文件和所有没有找到最终后缀的文件。 final suffix == primary.RC.txt,secondary.RC.txt,secondary.txt。
所以我想要的输出是:
tRapTrain.Isgf3g.2853.2.v1.primary.txt
tRapTrain.Yox1.txt
tRapTrain.Ypr015c.txt
tRapTrain.Yrm1.txt
我尝试用ls tRap*primary.txt
来做,但无法弄清楚如何同时做两个选择。任何帮助表示赞赏。
答案 0 :(得分:2)
您可以使用查找:
find * -type f -not -name "*.secondary.RC.txt" -not -name "*.primary.RC.txt" -not -name "*.secondary.txt" -print
答案 1 :(得分:1)
我会使用倒置的grep匹配:
ls tRap* | grep -v "\.RC\." | grep -v "\.secondary\."
这应该摆脱“.RC”的任何东西。或“。次要”。在标题中,听起来像你想要的。
这可能不是最优雅的,但它确实有效。
答案 2 :(得分:1)
使用Shopt:
$ shopt -s extglob
$ ls !(*primary.RC.txt|*secondary.RC.txt|*secondary.txt)
含义:
!(pattern-list)
Matches anything except one of the given patterns.