6

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

我正在尝试在这些文件中查找所有文件c并将h它们发送到管道和 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
4

2 回答 2

10

接受的答案包含一些不准确之处。在我的系统上,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'.

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

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

于 2016-04-21T22:57:12.103 回答
3

为什么不这样做:

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

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

关于find's option的有效参数,-regextype这逐字来自man find

-regextype 类型

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

没有类型sed

于 2012-10-11T19:12:44.367 回答