私はいくつかのスクリプトをgrep
特定のディレクトリに書くことに取り組んでいます、しかしこれらのディレクトリはあらゆる種類のファイルタイプを含みます。
私は今のところgrep
と.h
と.cpp
だけにしたいのですが、将来的には他にも少数の人がいるでしょう。
これまでのところ私は持っています:
{ grep -r -i CP_Image ~/path1/;
grep -r -i CP_Image ~/path2/;
grep -r -i CP_Image ~/path3/;
grep -r -i CP_Image ~/path4/;
grep -r -i CP_Image ~/path5/;}
| mailx -s GREP [email protected]
特定のファイル拡張子だけを追加する方法を他の人に教えてもらえますか。
このように--include
パラメータを使うだけです。
grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]
それはあなたが望むことをするべきです。
構文に関する注意事項
-r
- 再帰的に検索する-i
- case - 鈍感 search--include=\*.${file_extension}
- 拡張子またはファイルパターンのみに一致するファイルを検索しますこれらの答えの中には構文が多すぎるように思えるものもあれば、私のDebianサーバで問題を引き起こすものもありました。これは私のために完璧に働いた:
PHP革命:Linuxでファイルをgrepする方法、しかし特定のファイル拡張子だけ?
すなわち:
grep -r --include=\*.txt 'searchterm' ./
...または大文字と小文字を区別しないバージョン...
grep -r -i --include=\*.txt 'searchterm' ./
grep
:コマンド
-r
:再帰的
-i
:無視するケース
--include
:all * .txt:テキストファイル(ファイル名にアスタリスクがあるディレクトリがある場合に備えて、\でエスケープします)
'searchterm'
:何を検索するか
./
:現在のディレクトリから始めます。
どうですか?
find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print
grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./
HPサーバーとSunサーバーには-rオプションはありません。この方法は私のHPサーバーではうまくいきました。
find . -name "*.c" | xargs grep -i "my great text"
-iは、大文字と小文字を区別しない文字列の検索用です。
これは の問題であるため、 ファイルを見つけてください。find
を使ってみましょう。
GNU findを使用すると、-regex
オプションを使用して、拡張子が.h
または.cpp
のいずれかであるディレクトリのツリーからそれらのファイルを見つけることができます。
find -type f -regex ".*\.\(h\|cpp\)"
# ^^^^^^^^^^^^^^^^^^^^^^^
それから、それぞれの結果に対してgrep
を実行するだけです。
find -type f -regex ".*\.\(h\|cpp\)" -exec grep "your pattern" {} +
このようなfindの分布がない場合は、 Amir Afghaniの のように、オプションを連結するために-o
を使用する必要があります( 名前は.h
で終わるか.cpp
で終わります)。
find -type f \( -name '*.h' -o -name '*.cpp' \) -exec grep "your pattern" {} +
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
grep
を本当に使用したい場合は、--include
に示された構文に従ってください。
grep "your pattern" -r --include=*.{cpp,h}
# ^^^^^^^^^^^^^^^^^^^
最も簡単な方法は
find . -type f -name '*.extension' | xargs grep -i string
私はこの質問が少し時代遅れであることを承知しています、しかし私は私が通常見つけるために使う方法を共有したいです .c そして .h ファイル:
tree -if | grep \\.[ch]\\b | xargs -n 1 grep -H "#include"
行番号も必要な場合は、
tree -if | grep \\.[ch]\\b | xargs -n 1 grep -nH "#include"
以下の答えはいいです。
grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]
しかしに更新することができます:
grep -r -i --include \*.{h,cpp} CP_Image ~/path[12345] | mailx -s GREP [email protected]
これはもっと簡単になります。
ag
(銀の検索者)はこれのためのかなり簡単な構文を持っています
-G --file-search-regex PATTERN
Only search files whose names match PATTERN.
そう
ag -G *.h -G *.cpp CP_Image <path>
それぞれの "-o -name"に対して "-exec grep"を書くべきです
find . -name '*.h' -exec grep -Hn "CP_Image" {} \; -o -name '*.cpp' -exec grep -Hn "CP_Image" {} \;
または()でそれらをグループ化する
find . \( -name '*.h' -o -name '*.cpp' \) -exec grep -Hn "CP_Image" {} \;
option '-Hn'はファイル名と行を表示します。