带有find命令的regextype

时间:2012-10-11 18:54:19

标签: regex linux find

我正在尝试使用-regextype的find命令,但它无法正常工作。

我试图找到所有ch个文件将它们发送到管道并在这些文件中grep名称func_foo。我错过了什么?

$ find ./ -regextype sed -regex ".*\[c|h]" | xargs grep -n --color func_foo

同样在类似的方面我尝试了以下命令,但它给出了一个错误,比如路径必须在表达式之前:

$ find  ./  -type  f  "*.c"  |  xargs  grep  -n  --color  func_foo

2 个答案:

答案 0 :(得分:4)

接受的答案包含一些不准确之处。 在我的系统上,GNU find的联机帮助页说运行find -regextype help以查看支持的正则表达式类型列表。

# find -regextype help
find: Unknown regular expression type 'help'; valid types are 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'sed'.

E.g。 find . -regextype egrep -regex '.*\.(c|h)'找到.c.h个文件。 您的正则表达式语法错误,您使用方括号而不是括号。使用方括号,它将是[ch]

您也可以使用默认的正则表达式类型:find . -regex '.*\.\(c\|h\)$'也可以。请注意,在这种情况下,您必须转义(|)个字符(同时使用sed regextype)。使用egrepposix-egrepposix-extended时,您不必逃避它们。

答案 1 :(得分:3)

为什么不这样做:

find ./ -name "*.[c|h]" | xargs grep -n --color func_foo

find ./ -type f -name "*.c" | xargs grep -n --color func_foo

关于find选项-regextype的有效参数,这从man find开始逐字逐句:

  

-regextype type

     

更改稍后发生的-regex和-iregex测试所理解的正则表达式语法    命令行。当前实现的类型是emacs(这是默认值),    posix-awk,posix-basic,posix-egrep和posix-extended

没有类型sed