使用正则表达式定位命令以一次定位多个文件

时间:2016-05-02 14:07:23

标签: regex grep

compile.x86.log compile.x86.log-1 compile.x86.log-2 compile.x86.log-3error.log error.log_1 error.log_2 error.log_3等文件想要使用locate命令仅在其中找到compile.x86.logerror.log

到目前为止,我试过

echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+compile.x86\.log$')
echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+error\.log$')

采用上述个人方法,搜索/执行时间为0m18.068s。

如何组合上述两个?
另外请提供一些其他更好的解决方案,仅使用locate命令,最好使用locate -b选项,以便在更短的时间内搜索确切的名称(compile.x86.log和error.log)。

我试过echo $(/usr/bin/locate -i -b "compile.x86.log")
它只执行命令执行时间0m1.887s但在结果中返回compile.x86.log-1 compile.x86.log-2 compile.x86.log-3而不是仅返回我不想要的compile.x86.log
有没有办法在这种方法中grep查找结果只返回(compile.x86.log和error.log)。

2 个答案:

答案 0 :(得分:0)

按照你的逻辑,最简单的答案是:

echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+(compile\.x86|error)\.log$')

其中(compile\.x86|error)是指“this or this”模式的组合。

否则,使用find命令会更好:

find -type f -name "compile.x86.log" -o -name "error.log"

答案 1 :(得分:0)

因为locate数据库输出条目作为绝对路径名,并且模式匹配测试适用于整个路径名(通配符*不特别处理/),

locate -i '*/compile.x86.log' '*/error.log'

做你想做的事。

顺便说一下,命令周围的echo $(…)似乎很浪费。