GNU/Linux >> Belajar Linux >  >> Linux

Sorot teks yang mirip dengan grep, tetapi jangan memfilter teks

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:

  • egrep bisa dieja juga grep -E
  • --color biasanya 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 Lion
grep --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.


Linux
  1. Ubah Surat Masuk Dari Teks/biasa Menjadi Teks/html?

  2. VPS vs VPN – Nama Mirip, Tapi Fungsinya Sama Sekali Berbeda

  3. Cara Menemukan Teks Tertentu menggunakan GREP di Linux

  1. Cara mengaktifkan warna teks di vi mirip dengan vim di CentOS/RHEL

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Bagaimana menemukan file teks yang tidak mengandung teks di Linux?

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Bagaimana saya bisa memfilter hasil unik dari keluaran grep?

  3. Penggunaan memori tinggi tetapi tidak ada proses yang menggunakannya