2012-06-19 99 views
0

我想搜索到目录中的所有文件,像@“LBL_18989” @“LBL_15459”字符串结尾由.M,@“LBL_14359” ......Linux命令行的正则表达式

我的命令是:

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

,但它不工作:(

+1

@ F.J。 - 编辑帖子以纠正与他的代码错误导致混乱。 – jordanm

+0

最初的find命令是:'find。键入f -name * .m | grep'@“LBL _ [[0-9]”] +''。它不会允许我更改帖子,因为删除“\”不是6个字符的更改。 – jordanm

+1

您是否试图使用该字符串模式或包含带该模式的文本数据的文件来grep文件名? – jdi

回答

3

你应该总是给你的论点。您的发现-name模式包含“*”,这意味着shell将努力扩大它作为一个水珠它传递给前find。你也可以使用-regex来替代find到grep的输出。

find . -type f -regex '@"LBL_[[:digit:]"]+' 

基于jdi的评论,您可能会希望搜索给定正则表达式的这些文件的内容。如果是这样,您可以使用以下内容:

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

我实际上只是将自己的编辑作为答案输入。你也可以这样写:'-exec grep -H -E'@“LBL _ [[:digit:]”] +'{} \;' – jdi

+0

@jdi - 是的,这是我通常使用的方式, -H'不是POSIX,问题是标记为OSX。 – jordanm

+0

我现在在OSX框中。无论 – jdi

0

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

grep的 '@ “LBL _ [[0-9]”] +'

也匹配的文件名,如

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

如果列表确实是representat香港专业教育学院我就改用

grep的“@‘LBL _ [0-9] +’”

和引号字符移动到加后,在模式的结尾。 你可以使用grep,也许这就是你的用例,但是如果你使用egrep或grep和-E开关,你可以使用[[:digit:]]类。 POSIX.2使用破折号字符在括号表达式中的范围上皱眉。从POSIX规范:“范围非常依赖于排序,而便携式程序应该避免依赖它们。”