Saya mencoba untuk mendapatkan setiap perintah grep untuk menyorot hasilnya dalam warna yang berbeda. Saya bisa melakukannya secara manual dengan garis seperti ini:
ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f
Setiap c
karakter akan disorot dalam warna hijau dan setiap o
karakter akan disorot dalam warna merah, dll ...
Agar contoh ini berfungsi, Anda harus memastikan bahwa Anda selalu memiliki
--color=always
perintah grep. Saya telah mengatur ini di.bashrc
grep saya agar selalu memiliki warna:
export GREP_OPTIONS='--color=always'
Apa yang saya coba capai adalah membungkus fungsi ini dengan alias sehingga saya bisa menelepon grep
dan memiliki GREP_COLORS
nilai yang berbeda setiap kali. Saya memahami pertimbangan beberapa shell untuk setiap grep yang disalurkan baru dan saya mencoba untuk mengatasi ini dengan membuat beberapa file (satu untuk setiap warna), untuk menunjukkan bahwa mereka telah digunakan.
Saya telah melakukan beberapa upaya tetapi anehnya, yang ini tampaknya bekerja dengan "yang terbaik". Saya memiliki ini di .bashrc
:
alias mg="mygrep"
mygrep(){
# define possible colors
COLORS=("01;32" "01;31" "01;34" "01;36")
COUNTER=0
NUM=0
# as long as the color has already been used, keep searching
while [ -f /home/lior/Desktop/mygrep_$NUM ]; do
# get a random index
let NUM=`shuf --input-range=0-$(( ${#COLORS[*]} - 1 )) | head -1`
wait ${!}
$(( COUNTER+=1 ))
if [ "$COUNTER" -ge ${#COLORS[@]} ]; then
# remove all color locks
rm /home/lior/Desktop/mygrep_*
wait ${!}
fi
done
# mark this color as used
touch /home/lior/Desktop/mygrep_$NUM
wait ${!}
# lets go!
GREP_COLORS="mt=${COLORS[$NUM]}" grep "$@"
}
Saya menggunakan alias ini seperti ini:
ll | mg c | mg o | mg n | mg f
Hasilnya cukup keren. Namun ada beberapa kesalahan yang sedikit berbeda setiap kali. Berikut ini beberapa tangkapan layar:
Sepertinya shell melewati setiap perintah pipa, fungsi sebelumnya belum menyelesaikan eksekusi. Mencoba menghapus file yang tidak ada lagi. Saya tidak terlalu yakin dari mana command not found
kesalahan-kesalahan lain itu berasal.
Seperti yang Anda lihat, saya telah memasukkan beberapa wait
perintah untuk mencoba membiarkan manipulasi file selesai tetapi ini tampaknya tidak berfungsi dengan baik. Hal lain yang sudah saya coba adalah menggunakan memori bersama /dev/shm
tetapi menghasilkan hasil yang serupa.
Bagaimana cara saya mendapatkan hasil yang saya inginkan?
catatan:
Saya mencari jawaban yang hanya membungkus perintah grep karena memiliki banyak fungsi yang ingin saya gunakan dan bermaksud untuk memasukkan logika lain di antara pipa, jadi saya tidak ingin memberikan semua istilah pencarian sekaligus. Saya juga tidak mencari alat "grep like" lainnya. Maaf untuk @terdon yang telah memposting saran perl yang mengagumkan.
alias mg="mygrep; grep"
?
mygrep;
berubah menjadi perintah baru dalam dirinya sendiri dan aliran data hilang. Pipa yang masuk dari ls
akan diteruskan ke mygrep;
dan tidak untuk grep. Setidaknya begitulah cara saya memahaminya.
--color=always
semua perintah grep Anda. Saya telah mengaturnya secara global di .bashrc
. Saya sudah mengeditnya di posting.