Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Linux命令行正则表达式_Regex_Macos_Bash_Shell - Fatal编程技术网

Regex Linux命令行正则表达式

Regex Linux命令行正则表达式,regex,macos,bash,shell,Regex,Macos,Bash,Shell,我想在目录中搜索所有以.m结尾的文件,比如@“LBL_18989”@“LBL_15459”@“LBL_14359” 我的命令是: find . type f -name \*.m | grep '@"LBL_[[0-9]"]+' 但是它没有给出预期的结果。你应该总是引用你的论点。find的-name模式包含一个“*”,这意味着shell将在将其传递给find之前尝试将其扩展为glob。您还可以使用-regex,而不是将find的输出管道化到grep find . -type f -regex

我想在目录中搜索所有以.m结尾的文件,比如@“LBL_18989”@“LBL_15459”@“LBL_14359”

我的命令是:

find . type f -name \*.m | grep '@"LBL_[[0-9]"]+' 

但是它没有给出预期的结果。

你应该总是引用你的论点。find的-name模式包含一个“*”,这意味着shell将在将其传递给find之前尝试将其扩展为glob。您还可以使用-regex,而不是将find的输出管道化到grep

find . -type f -regex '@"LBL_[[:digit:]"]+'
根据jdi的评论,您可能需要搜索这些文件中给定正则表达式的内容。如果是,您可以使用以下选项:

find . type f -name '*.m' -exec grep -E '@"LBL_[[:digit:]"]+' /dev/null {} +

你应该经常引用你的论点。find的-name模式包含一个“*”,这意味着shell将在将其传递给find之前尝试将其扩展为glob。您还可以使用-regex,而不是将find的输出管道化到grep

find . -type f -regex '@"LBL_[[:digit:]"]+'
根据jdi的评论,您可能需要搜索这些文件中给定正则表达式的内容。如果是,您可以使用以下选项:

find . type f -name '*.m' -exec grep -E '@"LBL_[[:digit:]"]+' /dev/null {} +

你的代码为我运行。但是,您在问题中所述的正则表达式将与示例列表中的文件名相匹配。如果您正在查看文件名是否需要名称验证,这可能是一个问题,因为有些人会验证实际上不应该验证的名称。你的正则表达式模式

grep'@“LBL_[[0-9]”]+'

还匹配文件名,例如

  • @“LBL_”
  • @“LBL_2”
  • @“LBL_3”3
  • @“LBL”4
  • 如果你的清单真的有代表性,我会用

    grep'@“LBL_[[0-9]]+'”

    并将引号字符移动到模式末尾的加号后面。
    您可以使用grep,也许这就是您的用例,但是如果您使用带有-E开关的egrep或grep,您可以使用[[:digit:]]类。POSIX.2不赞成使用破折号字符的括号表达式中的范围。根据POSIX规范:“范围非常依赖于排序序列,可移植程序应该避免依赖它们。“

    您的代码为我运行。但是,您在问题中所述的正则表达式将与示例列表中的文件名相匹配。如果您正在查看文件名是否需要名称验证,这可能是一个问题,因为有些人会验证实际上不应该验证的名称。你的正则表达式模式

    grep'@“LBL_[[0-9]”]+'

    还匹配文件名,例如

  • @“LBL_”
  • @“LBL_2”
  • @“LBL_3”3
  • @“LBL”4
  • 如果你的清单真的有代表性,我会用

    grep'@“LBL_[[0-9]]+'”

    并将引号字符移动到模式末尾的加号后面。
    您可以使用grep,也许这就是您的用例,但是如果您使用带有-E开关的egrep或grep,您可以使用[[:digit:]]类。POSIX.2不赞成使用破折号字符的括号表达式中的范围。根据POSIX规范:“范围非常依赖于排序序列,可移植程序应该避免依赖它们。“

    @F.J.-编辑帖子以更正其代码中的错误会导致混乱。最初的find命令是:
    find。键入f-name*.m|grep'@“LBL[[0-9]”]+'
    。它不允许我更改帖子,因为删除“\”不是一个6个字符的更改。你是想用该字符串模式grep文件名,还是用该模式grep包含文本数据的文件?@jordanm,我没有编辑任何内容,只是为代码格式添加缩进,以便于阅读。我认为OP实际上打算把
    \*
    放在那里(因为没有必要为了让它出现在SO中而转义
    *
    )很抱歉,我没有查看源代码的差异,您是对的。@F.J.-编辑文章以更正代码错误会导致混淆。原始的find命令是:
    find。键入f-name*.m|grep'@“LBL[[0-9]”]+'
    。它不允许我更改帖子,因为删除“\”不是一个6个字符的更改。你是想用该字符串模式grep文件名,还是用该模式grep包含文本数据的文件?@jordanm,我没有编辑任何内容,只是为代码格式添加缩进,以便于阅读。我认为OP实际上打算把
    \*
    放在那里(因为没有必要为了让它出现在SO中而转义
    *
    )对不起,我没有看源代码的差异,你是对的。实际上我自己只是在键入编辑作为答案。您还可以将其编写为:
    -exec grep-H-E'@“LBL\[:digit:][]+'{}\
    @jdi-是的,这是我通常使用的方式,但是
    -H
    不是POSIX,问题被标记为OSX。我现在在OSX盒上。对我来说很好Regardless实际上我自己只是在键入编辑作为答案。您还可以将其编写为:
    -exec grep-H-E'@“LBL\[:digit:][]+'{}\
    @jdi-是的,这是我通常使用的方式,但是
    -H
    不是POSIX,问题被标记为OSX。我现在在OSX盒上。不管怎样,对我来说都很好