3

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

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 的文件以及所有没有找到最终后缀的文件。最终后缀 == 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但无法弄清楚如何同时进行这两个选择。任何帮助表示赞赏。

4

3 回答 3

2

您可以使用查找

find * -type f -not -name "*.secondary.RC.txt" -not -name "*.primary.RC.txt" -not -name "*.secondary.txt" -print
于 2013-04-02T09:23:33.537 回答
1

我会使用反向 grep 匹配:

ls tRap* | grep -v "\.RC\." | grep -v "\.secondary\."

这应该摆脱“.RC”的任何内容。或“.secondary”。在标题中,这听起来像你想要的。

这可能不是最优雅的,但它确实有效。

于 2013-04-02T09:15:11.920 回答
1

使用商店:

$ shopt -s extglob
$ ls !(*primary.RC.txt|*secondary.RC.txt|*secondary.txt)

意义:

!(pattern-list)
Matches anything except one of the given patterns.
于 2013-04-02T09:22:49.990 回答