2012-10-11 122 views
1

我試圖使用find命令與-regextype,但它無法正常工作。正則表達式與查找命令

我試圖找到所有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 

回答

1

爲什麼不只是做:

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

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

關於有效paramters到find「s選項-regextype這來自逐字從man find

-regextype類型

更改由發生以後-regex和-iregex測試理解正則表達式語法 命令行。目前實現的類型是emacs的(這是默認值), POSIX的AWK,POSIX標準的基礎上,與POSIX的egrep和POSIX擴展

沒有類型sed

1

接受的答案包含一些不準確的地方。 在我的系統上,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文件。 您的正則表達式語法錯了,您有方括號而不是括號。

您也可以使用默認的正則表達式類型:find . -regex '.*\.\(c\|h\)$'也可以。請注意,在這種情況下,您必須轉義(,|,)個字符(也有sed正則表達式類型)。使用egrep,posix-egrepposix-extended時,您不必逃脫它們。