Linux命令行正则表达式(Linux command line regex)

2019-09-18 06:29发布

我想搜索到目录中的所有文件对于像@字符串结尾由.M“LBL_18989” @“LBL_15459”,@“LBL_14359” ...

我的命令是:

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

但它不工作:(

Answer 1:

你应该总是给你的论点。 您的查找-name模式包含“*”,这意味着shell将尝试通过它找到之前展开的水珠。 您还可以使用-regex,而不是发现的管道输出到grep的。

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

基于JDI的评论,你可能会想搜索这些文件的内容,对于给定的正则表达式。 如果是这样,你可以使用以下命令:

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


Answer 2:

你的代码运行我。 但是,你在问题中所述的正则表达式匹配的不仅仅是你的榜样列表中的文件名等等。 这可能是一个问题,如果你正在寻找,看看你的文件名需要姓名验证,因为有些人会验证实在不应该。 你的正则表达式模式

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

也匹配的文件名,如

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

如果您的列表是真正代表我会改用

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

和引号字符移动到加后,在模式的结尾。 您可以使用grep,也许这就是你的使用情况,但如果您使用egrep的或用的grep -E开关你使用[[:数字:]类。 上使用短划线字符在括号表达式范围POSIX.2皱眉。 从POSIX规范:“这个范围与字符序列依赖性的,可移植的程序不应该依靠它们。”



文章来源: Linux command line regex