Jawaban:
alias cgrep='grep -nR --color'
Pemakaian:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Juga salah satu favorit saya:
$ pgrep some-hanging-process
akan mencantumkan semua proses yang cocok dengan nama beberapa proses-gantung yang dapat Anda gunakan dalam situasi berikut:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
umumnya harus lebih disukai daripada grep -R
yang sebelumnya tidak melintasi symlink.
Saya telah menemukan bahwa cara terbaik untuk mucikari grep adalah dengan menggunakan ack , yang pada dasarnya adalah grep rekursif dengan daftar pengabaian yang cerdas (misalnya, tidak mencari direktori .svn, mengabaikan file cadangan, dll.), Menyoroti warna hasil dan perl regexps. Itu yang ingin Anda lakukan 98,6% dari waktu.
Saya mengatur ini di .bashrc saya, alih-alih mendefinisikan ulang grep menggunakan alias:
export GREP_OPTIONS="--color=auto"
Bagi saya, ini berfungsi di Linux, MacOSX & FreeBSD.
GREP_OPTIONS
harus dianggap berbahaya. Saya sarankan untuk menggunakannya alias
. Lihat di sini: bugs.launchpad.net/ubuntu/+bug/67141
Saya akan merekomendasikan menghindari variabel lingkungan GREP_OPTIONS, itu akan mempengaruhi setiap doa grep, bahkan yang tertanam dalam alat lain. Jika alat-alat itu berharap grep berperilaku satu arah, dan Anda mengubah perilaku itu, alat itu akan dan memang merusak alat-alat itu.
Sebagai gantinya, Anda dapat membuat alias, yang berfungsi dengan baik. Ini hanya akan memengaruhi panggilan untuk mengambil dari shell interaktif Anda (mis. Anda mengetik sendiri).
Opsi terakhir, yang paling saya sukai, adalah membuat skrip wrapper yang memanggil grep. Saya lebih suka ini daripada alias, karena saya bisa meminta bungkus ini dari program lain. Misalnya dalam vim dengan mengatur vimgrep, sehingga pencarian saya dari dalam vim berperilaku identik dengan pencarian di baris perintah.
$ 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 $*
Aktifkan ini menggunakan:
$ grp pattern dir
misalnya
$ grp pattern .
akan mencari contoh 'pola' di semua file teks di dir dan subdir saat ini.
Perhatikan bahwa saya memanggil skrip saya 'grp', daripada membayangi 'grep', sehingga saya selalu sadar apakah saya memohon grep dengan default yang disesuaikan atau tidak.
Secara default saya sertakan:
-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
Saya pikir semua orang ingin melewatkan dirs kontrol sumber: .hg .git .bzr .svn
Melompati 'build' dan 'dist' adalah Python-isme, dan mungkin tidak berlaku untuk kebanyakan orang. Tidak diragukan lagi Anda akan mengembangkan keanehan Anda sendiri saat bekerja.
'tag' adalah output dari ctags, yang saya gunakan untuk 'pergi ke definisi fungsi' dan sejenisnya di alat seperti vim. Karena itu berisi setidaknya satu salinan dari setiap kata dan simbol dari kode sumber saya, jadi ada baiknya dilewati dari hasil pencarian Anda.
"$ *" pada akhirnya adalah sintaks bash untuk "dan semua params lainnya dari baris perintah", sehingga Anda dapat meneruskan dalam pola dan dir untuk mencari seperti biasa, dan menimpa bendera baris perintah lainnya yang Anda inginkan .
The --color
pilihan telah telah disebutkan beberapa kali, tapi saya ingin menambahkan bahwa hal itu mungkin untuk mengkonfigurasi warna di mana pertandingan akan disorot menggunakan variabel lingkungan
export GREP_COLOR="1;33"
Warna harus dikodekan menggunakan kode warna ANSI, untuk referensi
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
GREP_COLOR
sudah ditinggalkan. Gunakan GREP_COLORS
sebagai gantinya.
Karena saya tidak melihat contoh pengaturan warna sebenarnya, berikut ini adalah pengaturan sederhana untuk GNU grep:
# 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
Berhati-hatilah GREP_OPTIONS
; jangan menggunakannya untuk hal lain selain hal-hal seperti --color=auto
atau itu akan mengacaukan skrip yang menggunakan grep pada sistem Anda.