0

我想在目录中搜索以 .m 结尾的所有文件的字符串,例如 @"LBL_18989" @"LBL_15459" ,@"LBL_14359" ...

我的命令是:

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

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

4

2 回答 2

3

你应该总是引用你的论点。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 {} +
于 2012-06-19T16:48:33.420 回答
0

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

grep '@"LBL_[[0-9]"]+'

还匹配文件名,例如

  1. @"LBL_"
  2. @“LBL_2”
  3. @"LBL_3"3"
  4. @"LBL_"4

如果您的列表确实具有代表性,我会改为使用

grep '@"LBL_[[0-9]]+"'

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

于 2013-03-01T17:48:35.350 回答