Grepを使用して、ファイル内の文字列「crk」を見つけようとしています。私は文字列がフォームのCソースファイルに存在することを知っています
kop.crk_op = CRK_MOD_EXP;
ただし、を使用して検索する場合
grep -rnw --include '*.c' '.' -e "crk"
空の結果が得られます。この線
grep -rnw --include '*.c' '.' -e "crk_op"
うまく動作しますが、それは私には本当に役に立ちません。 「_」文字が何らかの形で検索を台無しにしていると思います。 「_」文字やその他の文字が存在する場合でも、「crk」が部分文字列であるすべての文字列に一致するようにアプローチを変更するにはどうすればよいですか?
編集:私はこの投稿で少しトリガー幸せになったようです。コマンド
grep -rnw --include '*.c' '.' -e "[^ ]*crk[^ ]*"
動作するようです。あるいは、誰かが余分なワイルドカードが必要な理由を説明できますか?
-w
オプションは、grepが単語を探すようにするため、非Word文字で囲まれている場合はcrk
を表示します。 man grep
から:
-w、--Word-regexp 完全な 単語を形成する一致を含む行のみを選択します。テストでは、一致する部分文字列は、行の先頭に があるか、Word 以外の構成文字が前にある必要があります。同様に、行の末尾 または非単語構成文字が続く必要があります。 単語構成文字は、文字、数字、 アンダースコア
_
はWord文字であるため、crk_op
はcrk
と-w
に一致しません。
複雑な正規表現"[^ ]*crk[^ ]*"
は、grepが必要とするWord境界の間にスペース以外の文字をいくつでも許可するため、機能します。
ただやる:
grep -rn --include '*.c' . -e crk
そこにある現在のディレクトリに対して.
をqouteする必要はありません。