如何解决我可以在命令行上使用否定的通配符吗?
在命令行SELECT SUM(Units),Member FROM LogTable WHERE [item] in ('Candy','drinks','meat')
GROUP BY Member
HAVING SUM(Units)>6
上,将匹配名称包含“ tmp”的所有文件。有没有一种快速的方法来进行相反的操作,即匹配名称不包含“ tmp”的所有文件?
我想出了如何使*tmp*
来执行(ls
),但是如果我想使用其他命令而不是ls -I "*tmp*"
则无济于事。有通用的方法吗?
我忘了:我正在使用zsh。
解决方法
使用bash
时,您可以通过以下方式启用extglob
:
shopt -s extglob
然后您可以使用:
!(*tmp*)
这将否定您的通配符条件。
您最终可以使用extglob
禁用shopt -u extglob
。
这取决于您的外壳。
在ksh中,您可以使用以下代码:
!(*tmp*)
在bash中,如果您首先使用shopt -s extglob
启用该功能,则同样的事情也会起作用。
在zsh中,您可以使用setopt ksh_glob
启用相同的语法,但是与另一个zsh功能存在冲突,您必须先使用setopt no_bare_glob_qual
禁用它,然后上述才能真正起作用。另外,您也可以通过setopt extended_glob
使用zsh的本机版本。上面的表达式的等效内容如下所示:
^*tmp*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。