Bagaimana cara saya mendapatkan grep untuk mengecualikan jalur tertentu?


3

Catatan: Ini BUKAN duplikat. Saya berurusan dengan contoh tertentu di mana opsi grep untuk mengecualikan jalur / direktori tidak berlaku dengan cara yang diharapkan.

Saya mencoba menggunakan grep untuk secara rekursif mencari sistem file root saya. Saya mencoba untuk mengecualikan direktori tertentu seperti /proc, /sys, dan /usr/local. Jika saya gunakan --exclude-dir=${DIR_NAME}, maka itu tidak akan mencari di jalur di bawah ${DIR_NAME}, tetapi ini juga berarti bahwa itu akan menolak untuk mencari jalur di bawah ${DIR_NAME}jika ${DIR_NAME}berada pada level di bawah direktori kerja saat ini. Sebagai contoh, pertimbangkan pohon sistem file ini:

${PWD}/
  data/
    settings/
      sys/
    users/
      developer/
        projects/
          my_os/
            build/
            src/
              apps/
              sys/
            Makefile
  extras/
  sys/
    apps/
    os/

Jika saya ingin pencarian saya dikecualikan ${PWD}/sysdan semua yang ada di dalamnya, grep -rl --exclude-dir=sysakan mengecualikannya, tetapi itu juga akan mengecualikan ${PWD}/data/settings/sysdan ${PWD}/users/developer/projects/my_os/src/sys, dua direktori saya ingin dimasukkan dalam pencarian saya.

Saya awalnya berharap bahwa --exclude-dir/ --excludeakan memungkinkan untuk ekspresi reguler dan saya telah menemukan komentar ini menunjukkan bahwa mereka melakukannya, tetapi tampaknya sintaks ekspresi reguler tidak mempengaruhi perilaku utilitas (misalnya, "^/(dev|proc)"). Saya baik-baik saja jika kedua opsi tersebut tidak menggunakan ekspresi reguler, tetapi saya tidak ingin pola pengecualian diterapkan ke komponen jalur tunggal. Apakah ada cara untuk membuatnya bekerja seperti itu?


Jawaban:


1

Cukup gunakan ini:

grep -r "text" | grep -i -v ^sys/ 

Anda dapat menambahkan begitu banyak "| grep -i -v ^ dir /" sesuai kebutuhan.


Grep pertama masih akan mencari direktori tersebut. Jadi ketika Anda mendapatkan 'file' seperti /dev/randomdan /dev/zero, itu akan menggantung selamanya. (Dan juga mencetak aliran pesan kesalahan.)
— falsePockets
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.