假设我有'n'个文件,其名称如link123.txt,link345.txt,link645.txt ......
我想为关键字grep这些'n'个文件的子集。
例如:
grep'searchtext'link123.txt link 345.txt ..
我想做点什么链接
grep'searchtext'链接[123 \ | 345] .txt
在这种情况下,如何将文件名称为正则表达式?
答案 0 :(得分:2)
您可以像这样使用find
和grep
find . -regex '.*/link\(123\|345\).txt' -exec grep 'searchtext' {} \;
感谢ghoti的评论。
答案 1 :(得分:2)
您可以使用bash选项extglob
,它允许扩展使用globbing,包括|
分隔的模式列表。
@(123|456)
匹配123
或456
之一。
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