正则表达式与Bash中的文件两种文件类型不匹配

时间:2012-11-29 01:31:10

标签: linux bash

我正在尝试使用非.html.js

的文件进行bash列表

我已经厌倦了以下两种方法,但都不起作用?

ls !(*.html|*.js)


ls | grep -v '\.(html|js)$'

4 个答案:

答案 0 :(得分:2)

还有另一种方法可以做到这一点。 bash有扩展glob模式的选项:

shopt -s extglob
ls !(*.html|*.js)

(注意,这仍然是一个glob模式,不是正则表达式 - 例如,*表示“任何字符串”,而不是“前面的零或更多” )。

答案 1 :(得分:1)

如果您的ls版本支持-I标记:

ls -I *.js -I *.html

从手册页:

-I, --ignore=PATTERN
       do not list implied entries matching shell PATTERN

否则,请使用find

find . -maxdepth 1 -type f ! \( -name "*.html" -o -name "*.js" \)

格式化添加:

 -printf "%f\n"

如果文件名需要通过管道传输,您只需要更改printf()语句:

-printf '%f\0' | xargs -0 ...

答案 2 :(得分:0)

extended-regexp-E选项一起使用:

ls | grep -E -v '\.(html|js)$'

答案 3 :(得分:0)

-I标记可以过滤ls输出:

ls -I '*.html' -I '*.js'

ls | grep -v -e '\.html' -e '\.js'

从手册页:

 -e PATTERN, --regexp=PATTERN
              Use PATTERN as the pattern; useful to protect patterns beginning with -.