GNU/Linux >> Belajar Linux >  >> Linux

Perintah Unix untuk Mendaftar file yang berisi string tetapi *TIDAK* berisi string lain

Penggunaan xargs dalam jawaban di atas tidak diperlukan; Anda dapat mencapai hal yang sama seperti ini:

find . -type f -exec grep -q <string-to-match> {} \; -not -exec grep -q <string-not-to-match> {} \; -print

grep -q berarti jalankan dengan tenang tetapi kembalikan kode keluar yang menunjukkan apakah kecocokan ditemukan; find kemudian dapat menggunakan kode keluar itu untuk menentukan apakah akan tetap menjalankan sisa opsinya. Jika -exec grep -q <string-to-match> {} \; mengembalikan 0, lalu akan mengeksekusi -not -exec grep -q <string-not-to-match>{} \; . Jika itu juga mengembalikan 0, itu akan mengeksekusi -print , yang mencetak nama file.

Seperti yang dicatat oleh jawaban lain, menggunakan find dengan cara ini memiliki keunggulan besar dibandingkan grep -Rl di mana Anda hanya ingin mencari file dari jenis tertentu. Sebaliknya, jika Anda benar-benar ingin mencari semua file, grep -Rl mungkin lebih cepat, karena menggunakan satu grep proses untuk melakukan filter pertama untuk semua file, bukan grep yang terpisah proses untuk setiap file.


Coba ini:

grep -rl <string-to-match> | xargs grep -L <string-not-to-match>

Penjelasan:grep -lr membuat grep secara rekursif (r) menampilkan daftar (l) dari semua file yang berisi <string-to-match> . xargs mengulang file-file ini, memanggil grep -L pada masing-masing dari mereka. grep -L hanya akan mengeluarkan nama file ketika file tidak mengandung <string-not-to-match> .


Jawaban-jawaban ini sepertinya cocok BOTH string. Perintah berikut seharusnya bekerja lebih baik:

grep -l <string-to-match> * | xargs grep -c <string-not-to-match> | grep '\:0'

Linux
  1. 15 Contoh Perintah Linux lsof (Identifikasi Open Files)

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Perintah untuk membuat daftar semua file kecuali . (titik) dan .. (titik titik)

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Jumlah File yang Mengandung String yang Diberikan?

  3. Kecualikan Daftar Direktori Dari Unix Temukan Perintah?

  1. Perintah Linux ls - Daftar File

  2. 10 Contoh Perintah Cat untuk Mengelola File di Linux / UNIX

  3. nm :Perintah untuk membuat daftar simbol dalam file objek.