在 grep 文件名中使用正则表达式
Using regex in grep filename
我想在多个反映不同服务器的存档日志文件夹中搜索某个字符串。我现在使用 2 个不同的命令
-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'
请帮忙。
正则表达式不是 glob。请参阅 man 7 glob
与 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
或类似的方法将其传递给命令)
我想在多个反映不同服务器的存档日志文件夹中搜索某个字符串。我现在使用 2 个不同的命令
-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'
请帮忙。
正则表达式不是 glob。请参阅 man 7 glob
与 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
或类似的方法将其传递给命令)