任何人都可以帮我一个正则表达式找到没有.tar.gz扩展名的文件
我需要它在我的unix脚本中工作
for i in <REGEX for non tar.gx files>
do
something
done
感谢
答案 0 :(得分:3)
永远不要永远不要使用正则表达式“匹配每个与Y不匹配的X”。相反,使用普通的正则表达式X并否定结果。
(在shell表达式中,将==
替换为!=
,或使用grep -v
。在Perl中,使用!~
而不是=~
。在JQuery中,使用:not
运算符等。如果您的API不允许您执行任何其他操作,只需指定一个正则表达式,请使用Chomsky的 A形式语言层次结构来击败供应商。)
补充的正则表达式总是低效,不可读或特定于引擎 - 通常都是以上所有。只是拒绝滥用正则表达式,使用工具来完成他们擅长的任务!
答案 1 :(得分:3)
在bash中,启用了extglob(看起来是默认值),你可以使用!(<glob>)
否定一个glob。所以:
for i in !(*.tar.gz)
do
something
done
如果你想匹配两个globs,你可以写for i in *.tar.gz *~
。同样,如果要匹配既不是gzip压缩文件也不是备份文件的所有文件,则可以编写for i in !(*.tar.gz|*~)
。
答案 2 :(得分:1)
如果您不想使用扩展通配符,您还可以包含一个简单的测试:
for file in *
do
if [[ $file != *.tar.gz ]]
then
something
fi
done
答案 3 :(得分:1)
另一种可能性(说明一种经常被忽视的技术)很简单:
ls | grep -v 'pdf$'|while read i; do echo "i=$i"; done
对于这个特殊问题,这是一个锤到裂缝的领域,但是如果你需要对一组具有稍微复杂的选择标准的文件做一些事情,这可以很快得到回报。
它可以在任何类似sh的外壳中工作。
答案 4 :(得分:1)
你也可以使用find
......
find . -type f -not -iname "*.tar.gz"