Saya menemukan grep
's --color=always
bendera untuk menjadi sangat berguna. Namun, grep hanya mencetak garis dengan kecocokan (kecuali jika Anda meminta garis konteks). Mengingat bahwa setiap baris yang dicetak memiliki kecocokan, penyorotan tidak menambah kemampuan sebanyak mungkin.
Saya benar-benar ingin cat
sebuah file dan melihat seluruh file dengan kecocokan pola yang disorot.
Apakah ada cara saya dapat memberitahu grep untuk mencetak setiap baris yang sedang dibaca terlepas dari apakah ada kecocokan? Saya tahu saya bisa menulis skrip untuk menjalankan grep pada setiap baris file, tetapi saya ingin tahu apakah ini mungkin dengan standar grep
.
sed
. yangsed
solusi membuat Anda beberapa warna pada biaya tambahan kompleksitas (bukan dari sekitar 30 karakter Anda memiliki sekitar 60 karakter).Jawaban:
Berikut ini beberapa cara untuk melakukannya:
sumber
egrep --color "pattern|" file
(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
. Kalau tidak, penyorotan warna tidak akan terjadi.Ada sesuatu di sepanjang baris yang sama. Kemungkinannya adalah, Anda akan menggunakan lebih sedikit, jadi coba ini:
Ini akan menyoroti pola dan melompat ke kemunculannya yang pertama dalam file.
sumber
-
:… | less -p pattern -
-i
opsi akan membuat case case tidak sensitif seperti padaless -ip pattern file
.less
dengan-R
switch:… | less -Rip introduction -
Saya ingin merekomendasikan ack - lebih baik daripada grep, alat pencarian yang hebat untuk programmer .
Saya suka itu karena default untuk pencarian direktori secara rekursif (dan melakukan jauh lebih pintar daripada
grep -r
), mendukung ekspresi reguler Perl penuh (daripada POSIXishregex(3)
), dan memiliki tampilan konteks yang jauh lebih baik ketika mencari banyak file.sumber
ack
cerdas, tetapi terkadang terlalu cerdas, dan tidak termasuk jenis file yang menjadi sasaran.ack -a
akan mencari semua jenis file, sementara masih mengecualikan.git/
.svn/
dll.ack
tidak mencari melalui gambar saya, begitu-a
juga banyak Saya menambahkan--type-set=freemarker=.ftl
ke saya~/.ackrc
, untuk memberikan satu contoh.Anda dapat menggunakan
highlight
skrip saya dari https://github.com/kepkin/dev-shell-essentialsIni lebih baik daripada
grep
karena Anda dapat menyorot setiap pertandingan dengan warnanya sendiri .sumber
grep
, yang merupakan utilitas standar pada mesin yang menjalankan * nix.colout
disebutkan dalam jawaban lain.colout
, yang bagus jika Anda ingin memeriksa apa fungsinya.Anda juga dapat membuat alias. Tambahkan fungsi ini di .bashrc Anda (atau .bash_profile di osx)
Anda sekarang dapat menggunakan alias seperti ini: "
ifconfig | grepe inet
" atau "grepe css index.html
".(PS: jangan lupa
source ~/.bashrc
memuat ulang bashrc pada sesi saat ini)sumber
--color=always
bukan--color
less
menafsirkan kode warna, gunakanless -R
.Gunakan
colout
program: http://nojhan.github.io/colout/Ini dirancang untuk menambahkan highlight warna ke aliran teks. Diberikan regex dan warna (misalnya "merah"), ia mereproduksi aliran teks dengan kecocokan yang disorot. misalnya:
Anda dapat membuat beberapa permintaan untuk menambahkan beberapa highlight warna yang berbeda:
Atau Anda dapat mencapai hal yang sama dengan menggunakan regex dengan grup N (bagian tanda kurung dari regex), diikuti oleh daftar warna N yang dipisahkan koma.
sumber
grep
, dan itu sudah diperluas dalam jawaban,colout
adalah solusi terbaik untuk masalah yang Anda miliki, yang terbaik yang saya sadari. Menurut filosofi UNIX, program harus ditulis untuk melakukan satu hal dengan baik. Untukgrep
itu menyaring aliran teks. Untukcolout
itu mewarnai atau menyoroti aliran teks.colout
merupakan alat yang sangat berguna. Pelajari sekali, gunakan dalam banyak situasi, daripada belajar satu alat untuk menyoroti file log, yang lain untuk menyoroti hasil tes, dll.Saya menggunakan rcg dari "Linux Server Hacks", O'Reilly. Ini sempurna untuk apa yang Anda inginkan dan dapat menyorot banyak ekspresi masing-masing dengan warna yang berbeda.
sumber
The
-z
pilihan untuk grep juga cukup licin!sumber
Saya menambahkan ini ke .bash_aliases saya:
sumber
Untuk menyorot pola saat melihat seluruh file, h bisa melakukan ini.
Plus itu menggunakan warna berbeda untuk pola yang berbeda.
Anda juga dapat menyalurkan output
h
keless -R
untuk membaca lebih baik.Untuk menangkap dan menggunakan 1 warna untuk setiap pola, cxpgrep mungkin cocok.
sumber
Ok, ini satu arah,
akan memberi Anda jumlah baris - katakan NN, maka Anda bisa melakukannya
sumber
Berikut ini adalah skrip shell yang menggunakan fungsi gkub Awk untuk mengganti teks yang Anda cari dengan urutan escape yang tepat untuk menampilkannya dalam warna merah terang:
Gunakan seperti ini:
Sayangnya, ia tidak memiliki semua fungsi grep.
Untuk informasi lebih lanjut, Anda dapat merujuk ke artikel " So You Like Color " di Linux Journal
sumber
Satu jawaban lain menyebutkan saklar grep's -Cn yang mencakup n baris Konteks. Saya kadang-kadang melakukan ini dengan n = 99 sebagai cara cepat dan kotor untuk mendapatkan [setidaknya] satu layar penuh konteks ketika pola egrep tampak terlalu fiddly, atau ketika saya menggunakan mesin yang belum saya instal rcg dan / atau ccze.
Saya baru-baru ini menemukan
ccze
yang merupakan pewarna yang lebih kuat. Satu-satunya keluhan saya adalah bahwa itu berorientasi layar (sepertiless
, yang saya tidak pernah gunakan untuk alasan itu) kecuali Anda menentukan -A switch untuk output "raw ANSI".+1 untuk
rcg
disebutkan di atas. Ini masih menjadi favorit saya karena sangat mudah untuk menyesuaikan dalam alias. Sesuatu seperti ini biasanya ada di my ~ / .bashrc:alias tailc = 'tail -f / my / app / log / file | rcg kirim "BOLD GREEN" terima "CYAN" error "RED" '
sumber
cara kotor lain:
Saya melakukan
dalam bashrc.
sumber
Atau Anda dapat menggunakan The Silver Searcher dan melakukannya
sumber
Jika Anda ingin menyorot beberapa pola dengan warna berbeda, lihat ini skrip bash .
Penggunaan dasar:
Anda dapat mengubah pola dan warna sambil menjalankan menekan satu tombol dan kemudian memasukkan tombol.
sumber
Saya menggunakan perintah berikut untuk tujuan serupa:
grep -C 100 searchtext file
Ini akan mengatakan grep untuk mencetak 100 * 2 baris konteks, sebelum & sesudah teks pencarian yang disorot.
sumber
Inilah pendekatan saya , terinspirasi oleh solusi @ kepkin:
Ini menerima beberapa argumen (tetapi tidak membiarkan Anda menyesuaikan warna). Contoh:
sumber
Opsi
-C999
akan melakukan trik dengan tidak adanya opsi untuk menampilkan semua baris konteks. Sebagian besar varian grep lainnya mendukung ini juga. Namun: 1) tidak ada output yang dihasilkan ketika tidak ditemukan kecocokan dan 2) opsi ini memiliki dampak negatif pada efisiensi grep: ketika-C
nilainya besar, banyak baris ini mungkin harus disimpan sementara di memori agar grep menentukan garis konteks mana untuk ditampilkan ketika kecocokan terjadi. Perhatikan bahwa implementasi grep tidak memuat file input tetapi membaca beberapa baris atau menggunakan jendela geser di atas input. "Sebelum bagian" dari konteks harus disimpan di jendela (memori) untuk menampilkan baris konteks "sebelum" nanti ketika kecocokan ditemukan.Pola seperti
^|PATTERN
atauPATTERN|$
atau setiap sub-pola pencocokan kosong dalam hal[^ -~]?|PATTERN
ini adalah trik yang bagus. Namun, 1) pola ini tidak menunjukkan garis yang tidak cocok disorot sebagai konteks dan 2) ini tidak dapat digunakan dalam kombinasi dengan beberapa opsi grep lainnya, seperti-F
dan-w
misalnya.Jadi tidak ada pendekatan yang memuaskan saya. Saya menggunakan ugrep , dan grep yang ditingkatkan dengan opsi
-y
untuk secara efisien menampilkan semua keluaran yang tidak cocok sebagai garis konteks yang disorot warna. Alat seperti grep lainnya seperti ag dan ripgrep juga menawarkan opsi pass-through. Tetapi ugrep kompatibel dengan grep GNU / BSD dan menawarkan superset opsi grep seperti-y
dan-Q
. Misalnya, berikut adalah opsi yang-y
ditampilkan ketika dikombinasikan dengan-Q
(UI kueri interaktif untuk memasukkan pola):sumber