Belirli yolları dışlamak için nasıl grep alabilirim?


1

Not: Bu bir kopya değildir. Grep'in yolları / dizinleri dışlama seçeneklerinin beklenen şekilde davranmadığı belli bir durumla ilgileniyorum.

Kök dosya sistemimi yinelemeli olarak aramak için grep kullanmaya çalışıyorum. Gibi bazı dizinleri dışlamaya çalışıyorum /proc, /sys, ve /usr/local. Kullanırsam --exclude-dir=${DIR_NAME}, sonra aşağıdaki yollarda arama yapmayacak ${DIR_NAME}, ama bu olacak Ayrıca aşağıdaki yolları aramayı reddedeceği anlamına gelir ${DIR_NAME} Eğer ${DIR_NAME} geçerli çalışma dizininin altındaki bir seviyede. Örnek olarak, bu dosya sistemi ağacını göz önünde bulundurun:

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

Aramamın hariç tutulmasını istiyorsanız ${PWD}/sys ve altındaki her şey, grep -rl --exclude-dir=sys dışlayacak, ancak dışlayacak ${PWD}/data/settings/sys ve ${PWD}/users/developer/projects/my_os/src/sys, aramamda istediğim iki dizin var.

Aslında bunu umuyordum --exclude-dir / --exclude düzenli ifadeler için izin olurdu ve bu yorum yaptıklarını belirten, ancak düzenli ifade sözdiziminin yardımcı programın davranışını etkilemediği anlaşılıyor (ör. "^/(dev|proc)" ). Bu iki seçenek normal ifadeler kullanmıyorsa iyiyim ancak dışlama deseninin tekil yol bileşenlerine uygulanmasını istemiyorum. Bu şekilde çalışmasını sağlamak için zaten var mı?


Yanıtlar:


1

Basitçe şunu kullanın:

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

İstediğiniz kadar "| grep -i -v ^ dir /" ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.