【问题标题】:A regex that works in `find` [duplicate]在`find`中工作的正则表达式[重复]
【发布时间】:2016-09-27 14:40:21
【问题描述】:

我有一个包含 ~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-compact 的:

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 的正确正则表达式格式是什么?

【问题讨论】:

    标签: regex unix find bsd


    【解决方案1】:

    在 OSX 上,您可以将此 find 与扩展正则表达式一起使用:

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

    在 gnu find 上使用:

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

    【讨论】:

    • 第一个有效 - 谢谢!你能解释一下为什么吗?开头的'.*/ 是怎么回事?
    • .*/Manuscript 在斜杠和Manuscript之前匹配0个或多个字符。即使这个文件在当前目录中,在Manuscript之前也会有./
    • 作为参考,-E 选项源自 FreeBSD,应该适用于 NetBSD、DragonflyBSD,但可能不适用于 OpenBSD。
    • @commanda: 你可以考虑接受这个答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多