在我的shell bash中,我必须选择以ab
或xyz
开头且不以.jpg
或.gif
这是我所做的,但它不起作用:
$ echo ab*[!.jpg] ab*[!.gif] xyz*[!.jpg] xyz*[!.gif]
答案 0 :(得分:6)
使用bash的扩展glob语法:
$ touch {ab,xyz}1234.{jpg,gif,txt,doc}
$ shopt -s extglob
$ echo @(ab|xyz)!(*@(.jpg|.gif))
ab1234.doc ab1234.txt xyz1234.doc xyz1234.txt
感叹号用于否定,@
符号用于或。
参考文献:
答案 1 :(得分:2)
使用grep:
ls | grep -E '^ab|^xyz' | grep -E -v '\.jpg$|\.gif$'
-v
将反转匹配
答案 2 :(得分:1)
您好,您可以尝试使用以下命令: -
ls {ab*,xyz*}.* | sed '/.jpg/d;/.gif/d'
如果将输出存储到文件中: -
ls {ab*,xyz*}.* | sed '/.jpg/d;/.gif/d' > shortedFile.txt
它将如何运作? ls {ab*,xyz*}.*
命令将列出以ab
和xyz
开头的所有文件,并使用sed
(管道)和{{1}将输出重定向到|
命令}}命令将删除以sed
和.jpg
结尾的文件名。
希望这会对您有所帮助