Gunakan ack. Lihat --passthru-nya opsi di sini:ack. Ini memiliki manfaat tambahan yang memungkinkan ekspresi reguler penuh perl.
$ ack --passthru 'pattern1' file_name
$ command_here | ack --passthru 'pattern1'
Anda juga dapat melakukannya menggunakan grep seperti ini:
$ grep --color -E '^|pattern1|pattern2' file_name
$ command_here | grep --color -E '^|pattern1|pattern2'
Ini akan mencocokkan semua garis dan menyorot polanya. ^ cocok dengan setiap awal baris, tetapi tidak akan dicetak/disorot karena itu bukan karakter.
(Perhatikan bahwa sebagian besar penyiapan akan menggunakan --color secara default. Anda mungkin tidak memerlukan tanda itu).
Anda dapat memastikan bahwa semua garis cocok tetapi tidak ada yang disorot pada kecocokan yang tidak relevan
egrep --color 'apple|' test.txt
Catatan:
egrepbisa dieja jugagrep -E--colorbiasanya default di sebagian besar distribusi- beberapa varian grep akan "mengoptimalkan" kecocokan kosong, jadi Anda mungkin ingin menggunakan "apple|$" sebagai gantinya (lihat:https://stackoverflow.com/a/13979036/939457)
EDIT:
Ini berfungsi dengan grep:
OS X Mountain Liongrep --color -E 'pattern1|pattern2|$'
Ini lebih baik daripada '^|pattern1|pattern2' karena ^ bagian dari pergantian cocok di awal baris sedangkan $ pertandingan di akhir baris. Beberapa mesin ekspresi reguler tidak akan menyorot pattern1 atau pattern2 karena ^ sudah cocok dan mesinnya bersemangat .
Hal serupa terjadi pada 'pattern1|pattern2|' karena mesin regex memperhatikan pergantian kosong di akhir string pola cocok dengan awal string subjek.
[1]: http://www.regular-expressions.info/engine.html
EDIT PERTAMA:
Saya akhirnya menggunakan perl:
perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
Ini mengasumsikan Anda memiliki terminal yang kompatibel dengan ANSI.
JAWABAN ASLI:
Jika Anda terjebak dengan grep yang aneh , ini mungkin berhasil:
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
Sesuaikan angka untuk mendapatkan semua garis yang Anda inginkan.
grep kedua hapus saja -- asing baris yang disisipkan oleh grep bergaya BSD di Mac OS X Mountain Lion, bahkan saat konteks kecocokan berurutan tumpang tindih.
Saya pikir grep GNU menghilangkan -- baris ketika konteks tumpang tindih, tapi sudah lama jadi mungkin saya salah ingat.