di bash, jika saya ingin mengeksekusi perintah dan hanya menampilkan garis output yang cocok dengan pola tertentu, saya bisa mengirimnya ke pipa grep
, seperti
file testfile
hello
there
my
friends
perintah
$ cat testfile | grep 'hello'
hello #this will be highlightd
ini akan menyoroti kecocokan pencarian dan menampilkan seluruh baris yang dituju. Saya bisa menggunakan -A
dan -B
menampilkan garis sebelum dan sesudah garis itu. Pertanyaan saya, mungkinkah menjalankan perintah dan menampilkan semua output seperti biasa, tetapi untuk menyorot hasil pencarian seperti yang dilakukan grep? jadi ouput saya akan menjadi
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
sumber
sumber
Jawaban:
Untuk menggunakan GREP Warna untuk hanya menyoroti pola yang cocok tetapi tidak mengubah output:
Pola pertama akan cocok dengan semua baris (semua baris akan dicetak) pola kedua (dan semua pola berikut) menyebabkan teks yang cocok disorot dalam warna.
Karena pola pertama cocok dengan semua baris tetapi tidak cocok dengan karakter yang dapat dicetak, itu tidak menambah highlight warna sehingga tidak bersaing / mengganggu pembacaan teks yang disorot.
sumber
kubectl apply -k . | grep --color=always -e "^" -e "configured"
di zsh"^"
harus kedua).Tambahkan opsi
-z
ke perintah grep GNU Anda:atau lebih pendek
sumber
grep --color "hello\|$" file
Demikian pula dengan jawaban sebelumnya, Anda dapat menangkap semua
$
ujung baris:-E
(atau--extended-regexp
) berarti bahwa karakter khusus harus dihindari\
. Saat menggunakannya,|
akan diperlakukan sebagai kondisi regex "ATAU".Grep
|$
juga akan menangkap dan mencetak semua baris yang memiliki akhir, tetapi karena $ adalah karakter tersembunyi, itu tidak dapat disorot.Memperbarui:
Jika Anda ingin mencetak semua output, tetapi juga mengembalikan kode keluar , apakah kecocokan ditemukan atau tidak, Anda dapat menggunakan perintah perl:
Jika Anda lebih suka sed - Berikut ini contoh cara menyorot semua pertandingan + mengembalikan kode keluar jika tidak ada yang cocok: https://askubuntu.com/a/1200851/670392
sumber
Ini berfungsi dengan grep GNU dan grep di FreeBSD:
Ini cocok dengan teks "halo" atau (
\|
) string null yang tidak dapat dicetak pada akhir setiap baris ($
). Itu sebabnya setiap baris dicetak tetapi hanya "halo" yang disorot.Kemungkinan Anda sudah
--color=auto
mengkonfigurasi di shell Anda. Maka Anda kemungkinan besar tidak perlu menentukan--color=always
:Anda juga dapat menyederhanakan versi dengan menggunakan
egrep
(dengan ekspresi reguler yang diperluas), di mana|
untuk ekspresi "atau" tidak perlu diloloskan:sumber
Menambah jawaban teratas di atas. Fungsi highlight {} yang disebutkan dalam komentar hanya berfungsi ketika data disalurkan ke dalamnya. Alias berikut, meskipun tidak sempurna, lebih bermanfaat:
Ini berfungsi dengan perintah seperti:
sumber