一个在`find`中工作的正则表达式

时间:2016-09-27 14:40:21

标签: regex unix find bsd

我有一个包含〜8000个文件

的文件的目录
output/Manuscript_00750_AnimalGiants-compact.json
output/Manuscript_00750_AnimalGiants-expanded.json
output/Manuscript_00750_AnimalGiants.json
output/Manuscript_00752_AnimalGiants-compact.json
output/Manuscript_00752_AnimalGiants-expanded.json
output/Manuscript_00752_AnimalGiants.json
output/Unit_TZH_12345_Foo-compact.json
output/Unit_TZH_12345_Foo-expanded.json
output/Unit_TZH_12345_Foo.json

我需要提出一个正则表达式来使用find工具来选择简单的Manuscript:

output/Manuscript_00750_AnimalGiants-compact.json
output/Manuscript_00752_AnimalGiants-compact.json

提出正则表达式很容易,但让find合作是困难的部分。

这是我的正则表达式:

/Manuscript[0-9_a-zA-Z]+-compact\.json/

以下是我尝试过的一些命令;都产生零结果。 cwd是output/上面的目录:

find output -regex "Manuscript[0-9_a-zA-Z]+-compact\.json"
find output -regex "\./output/Manuscript[0-9_a-zA-Z]+-compact\.json/"
find output -regex ".*\Manuscript[0-9_a-zA-Z]+-compact.*\json"

但是这个命令确实产生了结果 - 它选择所有以" Manuscript"开头的文件,这显然太宽泛了:

find output -regex ".*\Manuscript.*\json"

这里find的正确的正则表达式格式是什么?

1 个答案:

答案 0 :(得分:2)

在OSX上,您可以将此find -E output -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$' 与扩展的正则表达式一起使用:

find

在gnu find output -regextype posix-extended -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$' 上使用:

resolve.extensions