Her grep komutunun farklı bir renkle sonuçlandığını vurgulamaya çalışıyorum. Böyle bir çizgiyle manuel olarak yapabilirim:
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
Her c
karakter yeşil renkle vurgulanır ve her o
karakter kırmızı renkle vurgulanır, vb.
Bu örneğin çalışması için, daima
--color=always
grep komutlarınızda olmasını sağlamanız gerekir . Bunu ben ayarlıyorum bu.bashrc
yüzden grep her zaman renkleri olacak:
export GREP_OPTIONS='--color=always'
Başarmaya çalıştığım şey, bu işlevselliği bir takma adla sarmak, böylece her defasında arayabilir grep
ve farklı bir GREP_COLORS
değere sahip olabilirim . Her yeni borulu grep için çoklu mermilerin dikkatini anlıyorum ve zaten kullanıldıklarını belirtmek için bazı dosyalar (her renk için bir tane) oluşturarak bunu tekrar gündeme getirmeye çalışıyorum.
Bazı girişimler yaptım ama garip bir şekilde, bu "en iyi" işe yaramış gibi görünüyor. Bu benim içinde var .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 "$@"
}
Bu takma adı şöyle kullanıyorum:
ll | mg c | mg o | mg n | mg f
Sonuçlar oldukça iyi. Ancak her seferinde biraz farklı olan bazı hatalar var. İşte birkaç ekran görüntüsü:
Kabuk her boru komutundan geçerken, önceki işlev henüz çalışmasını tamamlamadı. Artık bulunmayan dosyaları kaldırmaya çalışıyor. Diğer command not found
hataların nereden geldiğinden emin değilim .
Gördüğünüz gibi wait
, dosya manipülasyonunun tamamlanmasına izin vermek için bazı komutlar koydum, ancak bu çok iyi çalışmıyor gibi görünüyor. Zaten denedim başka bir şey paylaşılan hafıza kullanmak, /dev/shm
ancak benzer sonuçlar vermiştir.
İstediğim sonuçları almaya nasıl devam edebilirim?
Not:
Grep komutunu, sadece kullanmak istediğim ve borular arasına başka bir mantık eklemek istediğim için çok fazla işlevselliğe sahip olduğu için cevapları arıyorum, bu nedenle tüm arama terimlerini bir kerede sağlamak istemiyorum. Ayrıca diğer "grep like" araçlarını da istemiyorum. Müthiş bir perl önerisi yayınlayan @ terdon'a üzgünüm .
alias mg="mygrep; grep"
mi
mygrep;
, başlı başına yeni bir komuta dönüşüyor ve veri akışı kayboluyor. Oradan gelen boru ls
sıyrılmayarak mygrep;
geçilirdi. En azından ben böyle anlıyorum.
--color=always
Tüm grep komutlarınızda olduğundan emin olmanız gerekir . Bunu global olarak benim yerime koydum .bashrc
. Bunu yazıya yazdım.