GNU grep kullanarak eşleşmeleri nasıl vurgulayabilirim?


18

Bazı Linux'ta gördüm ki grepEşleşmeyi vurgulamak ve eşleşen dosyayı yazdırmak için yapılandırılmış .

grepEşleşmeleri vurgulamak için nasıl yapılandırabilirim ?

Yanıtlar:


10
alias cgrep='grep -nR --color'

Kullanımı:

$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card

Ayrıca favorilerimden biri:

$ pgrep some-hanging-process

aşağıdaki durumlarda kullanabileceğiniz bazı asılı işlemlerin adıyla eşleşen işlemlerin tüm pidslerini listeler:

$ kill $(pgrep some-hanging-process)

12
sonuncusu için pkill komutu var
diega

1
GNU'nun son sürümleri ile grep, grep -rgenel olarak grep -Rsembolik bağlantıları geçmediği için genellikle tercih edilmelidir .
Stéphane Chazelas

19

Ben grep pezevenk en iyi yolu kullanmak olduğunu tespit ettik ack esasen özyinelemeli grep akıllı görmezden listeyle olan, sonuçların vurgulama rengi ve (örneğin, dizinleri .svn aramaz, yedek dosyaları vb yok sayar) perl normal ifadeleri. Grep'in% 98.6'sını yapmasını istediğiniz şey budur.


5
Ack bahsettiğiniz için +1. Sayfalandırılmış sonuçlar için vurgulamayı sürdürmek amacıyla --pager = "less -R" seçeneğini eklemeyi unutmayın. Ubuntu'da, "ack-grep" olarak anıldığından, "ack" alındığından da bahsetmek gerekir.
Shawn Chin

Ben de ack kullanıyorum, ama bazen mevcut değil ..
elmarco

2
Ack sadece perl programı olduğundan, olabilir yüksek bar değil sen perl yüklemiş kullanılabilir hiçbir yerinde yapmak.
Kai

Ack, hazır varsayılanlar için iyidir, ancak ack yüklemeniz gerektiğinde, grep için bazı varsayılanlar yapılandırmış olabilirsiniz - cevabımı bu sayfadaki başka bir yere bakın. Bunu 1980'lerde bir kez yaptım ve o günden beri grep ack'in yaptığı her şeyi yaptı. (ack'in aksini iddia eden yüksek iddialara rağmen sadece grep aslında daha hızlıdır)
Jonathan Hartley

7

Bunu bir takma ad kullanarak grep'i yeniden tanımlamak yerine .bashrc'de ayarladım:

    export GREP_OPTIONS="--color=auto"

Benim için bu Linux, MacOSX ve FreeBSD üzerinde çalışıyor.


GREP_OPTIONSzararlı kabul edilmelidir. Bunun aliasyerine kullanmanızı tavsiye ederim . Buraya bakın: bugs.launchpad.net/ubuntu/+bug/67141
lesmana

GREP_OPTIONS'ın belirli komut dosyalarında bir sorun olabileceğini kabul ediyorum. Ancak hata 67141'de savunduğum gibi , GREP_OPTIONS, kullanıcının birçok grep formu (grep, egrep, fgrep, rgrep, zgrep, bzgrep, bzfgrep, bzegrep vb.) İçin bir seçenek belirlemesine izin verirken, bir takma adın ayarlanması gerekir * grep'in her biçimi ve birçok grep türü vardır.
Stefan Lasiewski

Eskiden GREP_OPTIONS yıllarca kullandım (nay, onlarca yıl) ama neden olduğu zarar çok gerçek. Bu env var kümesiyle grep'i çağıran tüm araçlar, değiştirilmiş varsayılan davranışınızı devralır ve bu, bu araçları kırar. Bunun yerine bir takma ad veya yürütülebilir sarıcı komut dosyası tanımlayarak bu sorunu tamamen ortadan kaldırın.
Jonathan Hartley

Komut gerekir çevrelerini sterilize. Hayır ifs, buts veya howevers izin. Dönemi. (Evet, alt sırttaki kraliyet ağrısı ...).
vonbrand

3

Ortam değişkeni GREP_OPTIONS'dan kaçınmayı öneririm, diğer araçların içine gömülmüş olanlar bile, grep'in her çağrılmasını etkileyecektir. Bu araçlar grep'in bir şekilde davranmasını beklerse ve bu davranışı değiştirirseniz, bu araçları kıracak ve bozacaktır.

Bunun yerine, iyi çalışan bir takma ad oluşturabilirsiniz. Bu, yalnızca etkileşimli kabuğunuzdan grep çağrılarını etkiler (yani kendiniz yazmanız).

En çok sevdiğim son seçenek, grep'i çağıran bir sarıcı komut dosyası oluşturmaktır. Bunu bir takma adla tercih ederim, çünkü bu sarmalayıcıyı diğer programlardan çağırabilirim. Örneğin vim içinde vimgrep ayarlayarak vim içindeki aramalarım komut satırındaki aramalarla aynı şekilde davranır.

$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*

Bunu kullanarak şunları çağırın:

$ grp pattern dir

Örneğin

$ grp pattern .

geçerli dir ve alt dizinlerdeki tüm metin dosyalarında 'kalıp' örneklerini arayacaktır.

Komut dosyamı 'grep' gölgelemek yerine 'grp' olarak adlandırdığımı fark ettim, böylece grep'i özelleştirilmiş varsayılanlarımla çağırıp çağırmıyorum.

Varsayılan olarak şunları eklerim:

-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files

Herkesin kaynak kontrol dizinlerini atlamak istediğini düşünüyorum: .hg .git .bzr .svn

'İnşa' ve 'dist' atlamak Python-isms'dir ve muhtemelen çoğu insan için geçerli değildir. Hiç şüphe yok ki, çalışırken kendi tanımlarınızı geliştireceksiniz.

'tags' vim gibi araçlarda 'işlev tanımına git' ve benzerleri için kullandığım ctags çıktısıdır. Bu nedenle, kaynak kodumdaki her kelimenin ve sembolün en az bir kopyasını içerir, bu nedenle arama sonuçlarınızdan atlamaya değer.

Sonunda "$ *", "ve komut satırındaki diğer tüm parametrelerin" bash sözdizimidir, böylece normal olarak arama yapmak ve istediğiniz diğer komut satırı bayraklarını geçersiz kılmak için deseni ve dizini iletebilirsiniz. .


2

--colorSeçenek zaten birkaç kez söz edilmiştir, ama maçları bir ortam değişkenini kullanarak vurgulanır hangi renk yapılandırmak mümkün olduğunu eklemek istiyorum

export GREP_COLOR="1;33"

Renk, referans için ANSI renk kodları kullanılarak kodlanmalıdır

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37

1
GREP_COLORkullanımdan kaldırıldı. GREP_COLORSBunun yerine kullanın .
g33kz0r

2

Renkleri ayarlama konusunda herhangi bir örnek görmediğim için, GNU grep için basit bir kurulum:

# turn on colors, natch.
export GREP_OPTIONS="--color=auto"

if [[ $(echotc Co) -ge 256 ]]; then
  # 256 color terminals
  export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
  # everybody else
  export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi

Dikkatli olun GREP_OPTIONS; gibi şeyler dışında --color=autokullanmayın yoksa sisteminizde grep kullanan komut dosyalarını bozar.

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.