Min*_*int 140 macos bash shell grep
我只想从当前目录中获取文件,只输出.mp4 .mp3 .exe文件.所以我想我可以这样做:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Run Code Online (Sandbox Code Playgroud)
但是不,因为第一个grep只输出mp4,因此不会使用其他2个grep.
有任何想法吗?PS,在Slow Leopard上运行此脚本.
med*_*iev 319
为什么不:
ls *.{mp3,exe,mp4}
Run Code Online (Sandbox Code Playgroud)
我不知道我在哪里学到它 - 但我一直在使用它.
Pau*_*ce. 42
使用正则表达式find:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)
如果您正在管道文件名:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething
Run Code Online (Sandbox Code Playgroud)
这可以保护包含空格或换行符的文件名.
OS X find仅在使用-E(增强)选项时支持交替.
find -E . -regex '.*\.(mp3|mp4|exe)'
Run Code Online (Sandbox Code Playgroud)
mob*_*mob 35
egrep - 扩展grep - 将在这里提供帮助
ls | egrep '\.mp4$|\.mp3$|\.exe$'
Run Code Online (Sandbox Code Playgroud)
应该做的工作.
Jos*_*a K 12
最简单的方法就是使用ls
ls *.mp4 *.mp3 *.exe
Run Code Online (Sandbox Code Playgroud)
以防万一:你为什么不用find?
find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
Run Code Online (Sandbox Code Playgroud)
不需要grep.壳牌通配符可以解决问题.
ls *.mp4 *.mp3 *.exe
Run Code Online (Sandbox Code Playgroud)
如果你跑了
shopt -s nullglob
Run Code Online (Sandbox Code Playgroud)
然后将完全删除无法匹配的globs,而不是保留在未扩展的命令行上.
如果你想要不区分大小写的globbing(所以*.mp3将匹配foo.MP3):
shopt -s nocaseglob
Run Code Online (Sandbox Code Playgroud)
如果您仍在寻找替代解决方案:
ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'
Run Code Online (Sandbox Code Playgroud)
如果需要,请随意添加更多 -e 标志。
对于OSX用户:
如果使用ls *.{mp3,exe,mp4},如果其中一个扩展名没有结果,它将引发错误。
使用ls *.(mp3|exe|mp4)将返回与这些扩展名匹配的所有文件,即使其中一个扩展名具有0结果。