Grep in file dengan ekstensi spesifik di bawah direktori


11

Apakah ada perintah yang memungkinkan pencarian kata kunci dalam file di bawah direktori dengan ekstensi spesifik?

String grep -irn "string" ./pathmemberikan pencarian rekursif untuk semua file di bawah direktori ./path. Persyaratan khusus saya adalah untuk mencari di semua file di bawah ./pathdengan ekstensi seperti*.h

Jawaban:



10

S et (menyalakan) yang sh ell opt ion globstardengan perintah

    shopt -s globstar

Ini akan menyebabkan **komponen nama file berarti semuanya di sini dan di bawah. Jadi path/**berarti semua yang ada di pathdirektori dan subdirektori . (Anda tidak perlu mengetik di ./sini.) Maka Anda dapat menggunakan

grep -in "string" path/**/*.h

untuk mencari semua .hfile di dalam dan di bawah path.


Anda dapat u NSET pilihan dengan shopt -u.



3

Jika Anda dapat menginstal sesuatu di mesin Anda, saya sarankan menggunakan ack .

Anda dapat melakukan apa yang Anda butuhkan dengan itu dan banyak lagi. Untuk kasus penggunaan Anda, Anda dapat melakukan:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh filter pada file h
  • -Aku mengabaikan kasingnya

Untuk menemukan filter file mana yang didukung secara asli, jalankan perintah ack --help=type.


Ada juga ag , mantan klon ACK. Sebelumnya, karena set fitur mereka sejak itu agak berbeda.
8bittree

Saya tidak tahu ag. Terima kasih telah berbagi.
AD

3

Bagaimana dengan yang ini?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Penjelasan:

  • -L: ikuti symlinks
  • -nama: menggunakan tanda bintang, Anda dapat menjelaskan ekstensi
  • -in: sama dengan proposal Anda, tetapi 'r' digantikan oleh findperintah
  • {}: ini adalah singkatan dari hasil findperintah
  • \; : jika Anda bergabung finddengan -exec, ini adalah specifier end-of-command

1
Bagaimana cara "*.h"kerjanya? Saya akan berpikir itu perlu'*.h'
Joe

Saya selalu bekerja dengan tanda kutip ganda, saya tidak berpikir itu membuat perbedaan.
Dominique

0

Jika Anda menggunakan gnu grep maka ada bendera yang melakukan persis seperti yang Anda inginkan:

grep -irn --include=\*.h "string" path

walaupun saya tidak berpikir itu tersedia di greps lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.