मैं प्रत्येक grep कमांड प्राप्त करने की कोशिश कर रहा हूं ताकि यह अलग रंग में परिणत हो सके। मैं इसे इस तरह से एक लाइन के साथ मैन्युअल रूप से कर सकता हूं:
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
हरेक c
पात्र हरे रंग में और हर o
पात्र लाल रंग में हाइलाइट किया जाएगा ... आदि।
इस उदाहरण को काम करने के लिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपके पास हमेशा
--color=always
आपके grep कमांड्स हों। मैंने इसे सेट किया है.bashrc
इसलिए मेरे grep में हमेशा रंग होंगे:
export GREP_OPTIONS='--color=always'
जो मैं पूरा करने का प्रयास कर रहा हूं वह इस कार्यक्षमता को एक उपनाम के साथ लपेटने के लिए है, इसलिए मैं हर बार कॉल कर सकता हूं grep
और GREP_COLORS
हर बार एक अलग मूल्य रख सकता हूं । मुझे लगता है कि प्रत्येक नए पाइप के लिए कई गोले के विचार को समझें और मैं कुछ फाइलों (प्रत्येक रंग के लिए एक) का निर्माण करके इस पर आने की कोशिश कर रहा हूं, यह इंगित करने के लिए कि उनका उपयोग पहले ही किया जा चुका है।
मैंने कुछ प्रयास किए हैं लेकिन अजीब तरह से, यह "सबसे अच्छा" काम करने लगता है। मेरे पास यह है .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 "$@"
}
मैं इस तरह से अन्य उपनाम का उपयोग कर रहा हूं:
ll | mg c | mg o | mg n | mg f
परिणाम काफी अच्छे हैं। हालांकि कुछ त्रुटियां हैं जो हर बार थोड़ी भिन्न होती हैं। यहाँ स्क्रीनशॉट के एक जोड़े हैं:
ऐसा लगता है जैसे शेल प्रत्येक पाइप कमांड के माध्यम से जाता है, पिछले फ़ंक्शन ने अभी तक इसे समाप्त नहीं किया है। यह उन फ़ाइलों को हटाने की कोशिश करता है जो किसी भी अधिक मौजूद नहीं हैं। मुझे यह भी पक्का नहीं है कि वे अन्य command not found
त्रुटियाँ कहाँ से आ रही हैं।
जैसा कि आप देख सकते हैं, मैंने कुछ wait
आदेशों को फ़ाइल हेरफेर को पूरा करने की कोशिश करने के लिए रखा है, लेकिन यह बहुत अच्छी तरह से काम नहीं करता है। एक और चीज जो मैंने पहले ही आजमाई है वह साझा मेमोरी का उपयोग करना है /dev/shm
लेकिन यह समान परिणाम प्राप्त करता है।
मैं कैसे परिणाम प्राप्त करना चाहूंगा?
ध्यान दें:
मैं उन उत्तरों की तलाश में हूं जो केवल grep कमांड को लपेटते हैं क्योंकि इसमें बहुत सारी कार्यक्षमता है जो मैं उपयोग करना चाहता हूं और पाइप के बीच अन्य तर्क डालने का इरादा रखता हूं, इसलिए मैं एक बार में सभी खोज शब्द प्रदान नहीं करना चाहता। मैं अन्य "grep जैसे" टूल की भी तलाश नहीं कर रहा हूं। @Terdon को क्षमा करें जिन्होंने पहले से ही एक भयानक पर्ल सुझाव पोस्ट किया है।
alias mg="mygrep; grep"
?
mygrep;
यह अपने आप में एक नई कमांड में बदल जाता है और डेटा स्ट्रीम खो जाता है। आने वाले पाइप को ls
पास करने के लिए mygrep;
और नहीं पकड़ना होगा। कम से कम मैं इसे कैसे समझूं।
--color=always
आपके सभी grep कमांड हैं। मैंने वह विश्व स्तर पर स्थापित किया है .bashrc
। मैंने उसे पोस्ट में संपादित किया है।