从文件列表中选择文件

时间:2013-04-02 09:09:22

标签: linux bash

我有一个文件名列表,如下所示:

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来做,但无法弄清楚如何同时做两个选择。任何帮助表示赞赏。

3 个答案:

答案 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.