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



我正试图在bash中列出不是.html.js的文件

以下两种方法我都厌倦了,但都不管用?

ls !(*.html|*.js)

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

还有另一种方法。bash有一个扩展glob模式的选项:

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

(请注意,这仍然是一个glob模式,而不是一个正则表达式——例如,*的意思是"任何字符串",而不是"前面的零个或多个")。

如果您的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 "%fn"

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

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

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

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

-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 -.

相关内容

  • 没有找到相关文章

最新更新