带有find命令的regextype

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有find命令的regextype相关的知识,希望对你有一定的参考价值。

我试图使用-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
答案

为什么不这样做:

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类型

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

没有类型sed

另一答案

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

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

以上是关于带有find命令的regextype的主要内容,如果未能解决你的问题,请参考以下文章

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段

centos find 的正则表达写法

使用sunOS中的find命令比较两个目录中的所有文件

如何让 find 命令打印出带有文件名的文件大小?

如何使用 find 命令从列表中查找所有带有扩展名的文件?

如何在 Perl 中使用带有管道的 Unix/AIX find 命令?