如何在bash中使用带异常的通配符?

时间:2014-03-04 15:24:30

标签: regex bash shell wildcard glob

我想grep文件夹中的多个文件。除了像pcap文件和gziped文件这样的大文件之外,我想要大肆渲染它们。所以我在努力:

$ grep foo !({*pcap*,*gz*})

但这不起作用。因为虽然它避免了gziped文件,但!({*pcap*,*gz*})的shell扩展实际上会返回pcap文件。请问如何包含除pcap和gziped文件之外的所有文件?

3 个答案:

答案 0 :(得分:6)

GLOBIGNORE参数列出要从glob扩展结果中排除的文件:

假设当前目录为空:

$ touch foo1 foo2 foo3 foo10 foo11 foo12
$ GLOBIGNORE="foo1*:foo3"
$ ls *
foo2

答案 1 :(得分:5)

您需要将其更改为

grep foo  !(*pcap*|*gz*)

排除pcapgz个文件

答案 2 :(得分:1)

如果您没有可用的扩展模式,您还可以使用多个--exclude选项:

grep foo * --exclude "*.pcap" --exclude "*.gz"