Linux grep untuk file dimulai dengan huruf tertentu DAN mengandung kata-kata tertentu

1

Mencoba mencari direktori file untuk nama file yang dimulai dengan "h" dan mengandung "enu"?

Sejauh ini yang saya dapat, saya hanya tidak tahu bagaimana menangani kedua pernyataan grep dalam satu baris perintah?

find fs282/path/web/en_US.dic -exec grep "^h" {} \;
ElonCode
sumber
@ilkkachu maaf atas kebingungan. File dengan nama dimulai dengan h dan mengandung enu
ElonCode
Apa hubungannya fs282/path/web/en_US.dicfile (?) Dengan ini, atau apakah itu direktori?
Kusalananda
@ElonCode, ya, itu penggunaan grepyang saya temukan membingungkan, karena grepterutama digunakan untuk melihat isi file.
ilkkachu

Jawaban:

3

Untuk melihat nama file, gunakan -namekondisi find. Itu harus mengambil pola nama file biasa, jadi h*enu*cocok dengan yang Anda inginkan.

find /some/path -name "h*enu*"

grep sebagai gantinya akan melihat isi file, baris demi baris, jadi ini akan mencari baris yang cocok dengan pola:

find /some/path -type f -exec grep '^h.*enu' /dev/null {} +

(Outputnya adalah garis, bukan hanya nama file.)

grepmengharapkan ekspresi reguler sebagai kebalikan dari wildcard untuk -name. Juga, grepcari korek api di dalam garis sebagai lawan dari korek api penuh dengan -name, maka itu ^untuk jangkar pola di awal baris. The /dev/nullhanya ada untuk memastikan nama file selalu dicetak untuk setiap baris yang cocok, bahkan ketika hanya ada satu file yang cocok. Dengan implementasi GNU grep, seseorang dapat menggunakan -Hopsi sebagai gantinya.

ilkkachu
sumber
(argh, brainfarted dengan grep itu, terima kasih Stéphane.)
ilkkachu