सवाल कम और Grep: grep से कम पाइप का उपयोग करते समय रंगीन परिणाम प्राप्त करना


मैं grep के --colour विकल्प का बहुत उपयोग करता हूं, लेकिन मैं अक्सर कम भी उपयोग करता हूं। मैं grep परिणामों को कम करने और रंग को संरक्षित करने के लिए कैसे पाइप कर सकता हूं। (या यह संभव है?)

grep "search-string" -R * --colour | less 

संपादित करें:

मैं प्रत्यक्ष समाधान या इसके बराबर कुछ भी ढूंढ रहा हूं।


216
2017-09-04 21:46


मूल


के संभावित डुप्लिकेट 'कम' कमांड में रंग प्राप्त करें - Ciro Santilli 新疆改造中心 六四事件 法轮功


जवाब:


जब आप बस दौड़ते हैं grep --color यह संकेत मिलता है grep --color=auto जो पता लगाता है कि आउटपुट एक टर्मिनल है और यदि रंगों को सक्षम बनाता है। हालांकि, जब यह पाइप का पता लगाता है तो यह रंग अक्षम करता है। निम्नलिखित आदेश:

grep --color=always -R "search string" * | less

हमेशा रंग को सक्षम और स्वत: पहचान को ओवरराइड करेगा, और आपको रंग हाइलाइटिंग मिलेगी less

संपादित करें: हालांकि बस प्रयोग कर रहे हैं less मेरे लिए काम करता है, शायद पुराने संस्करण की आवश्यकता है -R रंगों को संभालने के लिए ध्वज, जैसा कि सुझाव दिया गया है।


247
2017-09-04 22:35



आपको उपयोग करने की ज़रूरत है less -R रंग एन्कोडिंग को कम से कम सही तरीके से व्याख्या करने के लिए - therefromhere
यह सिर्फ मेरे साथ काम किया less, यह संस्करण निर्भर हो सकता है। - drrlvn
ए (उम्मीद है) उपयोगी परिशिष्ट: मुझे कुछ मैचों को बाहर करने की आवश्यकता है लेकिन रंग बनाए रखना है, इसलिए मैं वास्तव में समाप्त हुआ grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, जो मेरी जरूरतों को पूरी तरह से पूरा किया। (एक बार फिर धन्यवाद!) - Owen Blacker
मुझे विश्वास नहीं है कि उन्होंने रंग-हैंडलिंग सुविधा को अभी लागू किया है less और इसलिए एक विशेष होने का मौका चूक गया colorless उपकरण। अकेले नाम के लिए यह किया जाना चाहिए था! मुझे शायद एक पैच लिखना चाहिए जो बाइनरी के रूप में चलने पर स्वचालित रूप से स्वचालित रूप से आरआर को लिखता है colorless। - Christian
@OwenBlacker यह एक उपनाम नहीं हो सकता है। आपके पास हो सकता है $LESS के साथ सेट करें -R। - greyfade


आप इसे अपने अंदर रख सकते हैं .bashrc फ़ाइल:

export GREP_OPTIONS="--color=always"

या इस तरह एक उपनाम बनाओ:

alias grepc="grep --color=always"

और आपको इसका उपयोग करने की आवश्यकता होगी -R के लिए विकल्प less, जैसा कि वहां से बताया गया है


27
2017-09-05 10:46



चेतावनी !: GREP_OPTIONS = "- रंग = हमेशा" तोड़ सकता है अनेक स्क्रिप्ट जो grep (या (e | f) grep का उपयोग करते हैं)। - mctylr
हाँ, बस grep के लिए बेहतर है। आप हमेशा शुद्ध हो सकते हैं grep साथ में GREP, या ओवरराइड करें --color विकल्प मैन्युअल रूप से। - asmeurer
यह मेरे लिए काम नहीं करता है, उपनाम हालांकि काम करता है। - saeedgnu


इस तरह, मैं वास्तव में छोटी sh फाइलें बनाना और उन्हें चालू करना पसंद करता हूं /usr/local/bin
मैं आमतौर पर उपयोग करता हूं grep पर रिकर्सिव तरीके से pwd, तो मेरी व्यक्तिगत लिपि है:

#!/bin/sh
grep --color=always -r "$@" . | less -R

और फिर मैंने इसे अभी कॉपी किया है /usr/local/bin/g (हाँ, मैं इसका बहुत उपयोग करता हूं)


4
2017-09-30 21:48



इस तरह की चीज़ के लिए केवल शैल फ़ंक्शंस का उपयोग क्यों न करें? g() { grep --color=always -r "$@" . | less -R } समान रूप से काम करता है और शायद बेहतर प्रदर्शन (मिनट) प्रदान करेगा। - 00dani


"Grep" उपनाम न करें, जो "कम" उपनाम के लिए बेहतर है जिसे गोले द्वारा कभी भी उपयोग नहीं किया जाता है। आपके में .bashrc रख दो: alias less="less -r"


1
2018-01-20 10:28



बिलकुल ठीक नहीं। एक का उपयोग करने की जरूरत है दोनों  grep --color=always तथा less -R। ध्यान दें कि grep केवल जानता है कि इसे किसी अन्य प्रक्रिया में पाइप किया जा रहा है और --color=auto विकल्प यह निर्धारित करने के लिए पूरी तरह से उपयोग करता है कि आउटपुट रंग या नहीं। - brandizzi
ध्यान दें कि less विकल्प -r से अलग है -R। शायद -R सुरक्षित है - Craig McQueen
तो मेरा समाधान क्यों कम मत करो। ओपी विशेष रूप से पूछते हैं less पहले से ही '--color' विकल्प का उपयोग कर उदाहरण के साथ। - not2qubit
एक उपनाम शायद अवांछनीय है। less एक का समर्थन करता है $LESS वातावरण विविधता। तो, एक उपनाम के बजाय, export LESS='-R' बेहतर हो सकता है। - greyfade


मुझे दौड़ने की ज़रूरत है

grep --color=always -R "search string" * | less - r

उसके साथ -r बाद में झंडा कम से, इसे चलाने के क्रम में।


0
2018-01-18 10:51