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のオプションへの有効なパラメーターに関して、-regextypeこれは逐語的に次のman findとおりです。

-正規表現タイプ

コマンド ラインで後で実行される -regex および -iregex テストで理解される正規表現構文を変更します。現在実装されているタイプは、emacs (これがデフォルト)、posix-awk、posix-basic、posix-egrep、および posix-extended です。

タイプはありませんsed

于 2012-10-11T19:12:44.367 に答える