使用正则表达式grep多个文件以指定要搜索

时间:2017-09-27 00:44:38

标签: regex bash grep

假设我有'n'个文件,其名称如link123.txt,link345.txt,link645.txt ......

我想为关键字grep这些'n'个文件的子集。

例如:

  

grep'searchtext'link123.txt link 345.txt ..

我想做点什么链接

  

grep'searchtext'链接[123 \ | 345] .txt

在这种情况下,如何将文件名称为正则表达式?

4 个答案:

答案 0 :(得分:2)

您可以像这样使用findgrep

find . -regex '.*/link\(123\|345\).txt' -exec grep 'searchtext' {} \;

感谢ghoti的评论。

答案 1 :(得分:2)

您可以使用bash选项extglob,它允许扩展使用globbing,包括|分隔的模式列表。

@(123|456)

匹配123456之一。

shopt -s extglob
grep 'searchtext' link@(123|345).txt
shopt -u extglob

答案 2 :(得分:0)

我认为您可能要求使用find功能来搜索带有正则表达式的文件名。

正如here所述,您可以轻松使用find . -regex '.*/link\([0-9]\{3\}\).txt'来显示所有这三个文件。现在你只需要玩正则表达式。

PS:不要忘记在模式的开头指定.*/

答案 3 :(得分:0)

看来,你不需要正则表达式来确定grep的文件,因为你全部枚举它们(实际上,你实际上枚举了最小的唯一部分而不重复公共前缀/后缀)。 / p>

如果不需要正则表达式功能且唯一的目的是避免重复公共前缀/后缀,那么简单的迭代将是一个选项:

for i in 123 345 645; do grep searchpattern link$i.txt; done