在命令行中使用带有正则表达式的 egrep 不起作用,并且我收到标题中的错误。
egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"
我已经验证了正则表达式https://regex101.com/r/pL5pW4/1并使用了 shellcheck.net,两者都说没有问题。我试图匹配特定的文件夹,如下所示:
egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the
此示例中的“sd.dfr”和“test”是正则表达式的用途。用于将这些组合中的任何组合与文件夹路径匹配。我尝试过使用引号、转义和双引号。为什么这不起作用?
答案1
grep
搜索正则表达式在内容中文件。它不会搜索名称匹配的文件正则表达式。(用于find
此目的。)此外,在 grep 看到它们之前,您提供的文件/目录名称列表由 shell 解释。shell 使用以下方法匹配文件 全局变量不是正则表达式。
Shell globs 不如正则表达式那么精确,但是下面的方法可能对你来说已经足够了:
egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"
或者更好的是,因为egrep
已被弃用:
grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"