Saya mencoba mencari file yang berisi kata tertentu menggunakan grep
. Ada banyak file di direktori (> 500)
Perintah yang saya jalankan
$ grep 'delete' *
Keluaran
validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines
Ini adalah file yang tidak berisi kecocokan yang diberikan. Saya ingin menekan garis-garis itu agar tidak ditampilkan ke stdout. Saya tahu tentang -q
beralih, tetapi itu akan menekan output lengkap, yang tidak saya inginkan.
Bagaimana cara melakukannya?
Jawaban yang Diterima:
Itulah perilaku yang ditunjukkan oleh grep -c
.
Mungkin Anda memiliki file yang namanya dimulai dengan -
dan berisi c
karakter dan Anda menggunakan grep GNU tanpa menyetel POSIXLY_CORRECT
variabel lingkungan.
Gunakan:
grep -- delete *
atau lebih baik:
grep delete ./*
--
menandai akhir opsi sehingga nama file itu tidak akan dianggap sebagai opsi (dengan grep POSIX, itu tidak akan terjadi karena non-opsi delete
argumen akan menandai akhir opsi), tetapi tidak akan mengatasi masalah file bernama -
. grep delete ./*
lebih kuat tetapi memiliki kelemahan dalam mengeluarkan ./
extra tambahan untuk file yang cocok (meskipun itu dapat dianggap sebagai bonus karena membantu mengidentifikasi nama file yang berisi karakter baris baru).