regex / linux find命令无法按预期工作

时间:2012-02-23 20:48:42

标签: regex bash find

背景:我试图通过管道输出来获取我的根web目录中的所有代码文件(.html | .htm | .php | .js | .css)的总行数(递归)这进入xargs wc -l | grep total

$ find . -regex '.+\.php'
./inc/db.php
./inc/userauth.php
./index.php
.......... etc.

$ find . -regex '.+\.js'
./inc/jquery-1.7.1.js
./inc/script.js

$ find . -regex '.+\.(php|js)'
(returns nothing)

根据this

abc(def|xyz) matches abcdef or abcxyz

所以不应该.+\.(php|js)匹配所有的.php文件和.js文件吗?

2 个答案:

答案 0 :(得分:6)

find使用不同风格的正则表达式,因此您必须编写\(js\|php\)而不是(js|php)

答案 1 :(得分:4)

find . -regex '.+\.\(php\|js\)'

转义特殊的字符,虽然它取决于你的shell(所以我在这里热心)。