我想在一些反映不同服务器的归档日志文件夹中搜索特定的字符串。到目前为止,我使用了两个不同的命令
-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'
请帮帮忙。
发布于 2022-01-11 11:14:01
Regex不是地球人。见man 7 glob vs man 7 regex。
带正则表达式的grep .grep过滤器线匹配一些常规的表示。
Shell扩展您所写的单词。Shell替换包含“文件名扩展触发器”的* ? [,并用匹配文件名的单词列表替换该单词。
您可以使用扩展模式匹配(请参阅man bash),这听起来最自然:
shopt -s extglob
echo /mnt/bkp/logs/cmmt-54-2@(2[8-9]|3[0-3])/my_app.2021-12-28-*在交互式shell中,我只需要写两次:
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):
zcat /mnt/bkp/logs/cmmt-54-2{2[8-9],3[0-3]}/my_app.2021-12-28-*大括号扩展首先用两个单词替换单词,然后将文件名展开替换为实际文件名。
您也可以使用find文件使用-regex。要了解这一点,请参见man find。(或输出文件名列表并将其输送到grep,然后使用xargs或类似的方法将其传递给命令)
https://stackoverflow.com/questions/70665541
复制相似问题