Alper Kultur
Alper Kultur

Reputation: 135

regextype with find command

I am trying to use the find command with -regextype but it could not able to work properly.

I am trying to find all c and h files send them to pipe and grep the name, func_foo inside those files. What am I missing?

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

Also in a similar aspect I tried the following command but it gives me an error like paths must precede expression:

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

Upvotes: 9

Views: 17844

Answers (2)

Gene Pauly
Gene Pauly

Reputation: 1645

The accepted answer contains some inaccuracies. On my system, GNU find's manpage says to run find -regextype help to see the list of supported regex types.

# 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)' finds .c and .h files. Your regexp syntax was wrong, you had square brackets instead of parentheses. With square brackets, it would be [ch].

You can just use the default regexp type as well: find . -regex '.*\.\(c\|h\)$' also works. Notice that you have to escape (, |, ) characters in this case (with sed regextype as well). You don't have to escape them when using egrep, posix-egrep, posix-extended.

Upvotes: 18

alk
alk

Reputation: 70921

Why not just do:

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

and

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

Regarding the valid paramters to find's option -regextype this comes verbatim from man find:

-regextype type

Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended

There is no type sed.

Upvotes: 3

Related Questions