it-swarm-tr.com

grep, ancak yalnızca belirli dosya uzantıları

Bazı dizinleri grep dizinine yazmak için çalışıyorum, ancak bu dizinler her türlü dosya türünü içeriyor.

Şimdilik grep sadece .h ve .cpp öğelerini istiyorum, ancak gelecekte bir kaç tane daha olabilir.

Şimdiye kadar var:

{ 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]

Birisi bana şimdi sadece belirli bir dosya uzantısını nasıl ekleyeceğimi gösterebilir mi?

798
Jason

Sadece böyle --include parametresini kullanın:

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

bu ne istersen onu yapmalı.

Sözdizimi notları:

  • -r - özyinelemeli olarak arama
  • -i - case - duyarsız arama
  • --include=\*.${file_extension} - yalnızca uzantılara veya yalnızca dosya düzenine uyan dosyaları arayın
1110
Nelson

Bu cevapların bazıları çok fazla sözdizimi gibiydi ya da Debian Sunucumda sorunlara yol açtı. Bu benim için mükemmel çalıştı:

PHP Devrimi: Linux'ta dosyaları nasıl bulabilirim, ama sadece belirli dosya uzantıları?

Yani:

grep -r --include=\*.txt 'searchterm' ./

... veya büyük/küçük harfe duyarlı olmayan sürüm ...

grep -r -i --include=\*.txt 'searchterm' ./
  • grep: komut

  • -r: özyinelemeli

  • -i: yoksay

  • --include: all * .txt: text files (dosya adlarında yıldız işaretli bir dizinin olması durumunda\ile birlikte kaçış)

  • 'searchterm': Ne aranacak

  • ./: Geçerli dizinde başla.

234
HoldOffHunger

Peki ya:

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print
47
Amir Afghani
grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./
43
Yuri Malov

HP ve Sun sunucularında -r seçeneği yoktur, bu şekilde benim için HP sunucumda çalıştı.

find . -name "*.c" | xargs grep -i "my great text"

-i string büyük/küçük harf duyarsız arama içindir

15
Sam B

Bu, finding files meselesi olduğu için, find!

GNU find komutunu kullanarak, uzantıları -regex veya .h olan dizinler ağacındaki dosyaları bulmak için .cpp seçeneğini kullanabilirsiniz:

find -type f -regex ".*\.\(h\|cpp\)"
#            ^^^^^^^^^^^^^^^^^^^^^^^

O zaman, sonuçlarının her birinde grep komutunun çalıştırılması meselesidir:

find -type f -regex ".*\.\(h\|cpp\)" -exec grep "your pattern" {} +

Eğer bu buluntu dağılımına sahip değilseniz, Amir Afghani's gibi bir yaklaşım kullanmanız gerekir, seçenekleri birleştirmek için -o kullanın ( ad ya .h ile ya da .cppile bitiyor):

find -type f \( -name '*.h' -o -name '*.cpp' \) -exec grep "your pattern" {} +
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Ve eğer grep işlevini gerçekten kullanmak istiyorsanız, --include ile belirtilen sözdizimini izleyin:

grep "your pattern" -r --include=*.{cpp,h}
#                      ^^^^^^^^^^^^^^^^^^^
11
fedorqui

En kolay yol

find . -type  f -name '*.extension' | xargs grep -i string 
7
user3640130

Bu sorunun biraz tarihli olduğunu biliyorum, ancak normalde bulmak için kullandığım yöntemi paylaşmak istiyorum .c ve .h Dosyalar:

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -H "#include"

veya hat numarasına da ihtiyacınız varsa:

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -nH "#include"
3
Tom

Cevabın altındaki cevap iyidir.

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

Ancak şu şekilde güncellenebilir:

grep -r -i --include \*.{h,cpp} CP_Image ~/path[12345] | mailx -s GREP [email protected]

Hangisi daha basit olabilir.

2
hao

ag (gümüş arayıcı) bunun için oldukça basit sözdizimine sahiptir

       -G --file-search-regex PATTERN
          Only search files whose names match PATTERN.

yani

ag -G *.h -G *.cpp CP_Image <path>
2
Eldamir

Her "-o -name" için "-exec grep" yazmalı.

find . -name '*.h' -exec grep -Hn "CP_Image" {} \; -o -name '*.cpp' -exec grep -Hn "CP_Image" {} \;

Veya onları () ile gruplayın

find . \( -name '*.h' -o -name '*.cpp' \) -exec grep -Hn "CP_Image" {} \;

'-Hn' seçeneği dosya adını ve satırı gösterir.

1
where23