首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在grep文件名中使用regex

在grep文件名中使用regex
EN

Stack Overflow用户
提问于 2022-01-11 10:51:47
回答 1查看 177关注 0票数 -1

我想在一些反映不同服务器的归档日志文件夹中搜索特定的字符串。到目前为止,我使用了两个不同的命令

-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-22[8-9]/my_app.2021-12-28-* | grep 'abc'

-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-23[0-3]/my_app.2021-12-28-* | grep 'abc'

我基本上想搜索服务器文件夹cmmt-54-228,cmmt-54-229 .cmmt 54-233

我尝试将这两个命令合并为一个命令,但在使用regex时似乎并没有出现错误。

-bash-4.1$ zcat /mnt/bkp/logs/cmmt-54-22[8-9]|3[0-3]/my_app.2021-12-28-* | grep 'abc'

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 11:14:01

Regex不是地球人。见man 7 glob vs man 7 regex

带正则表达式的grep .grep过滤器线匹配一些常规的表示。

Shell扩展您所写的单词。Shell替换包含“文件名扩展触发器”的* ? [,并用匹配文件名的单词列表替换该单词。

您可以使用扩展模式匹配(请参阅man bash),这听起来最自然:

代码语言:javascript
运行
复制
shopt -s extglob
echo /mnt/bkp/logs/cmmt-54-2@(2[8-9]|3[0-3])/my_app.2021-12-28-*

在交互式shell中,我只需要写两次:

代码语言:javascript
运行
复制
zcat /mnt/bkp/logs/cmmt-54-22[8-9]/my_app.2021-12-28-* /mnt/bkp/logs/cmmt-54-23[0-3]/my_app.2021-12-28-*

或者使用支撑扩展(参见man bash):

代码语言:javascript
运行
复制
zcat /mnt/bkp/logs/cmmt-54-2{2[8-9],3[0-3]}/my_app.2021-12-28-*

大括号扩展首先用两个单词替换单词,然后将文件名展开替换为实际文件名。

您也可以使用find文件使用-regex。要了解这一点,请参见man find。(或输出文件名列表并将其输送到grep,然后使用xargs或类似的方法将其传递给命令)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70665541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档