मैं ग्नू ग्रीप का उपयोग करके मैचों को कैसे उजागर कर सकता हूं?


18

मैंने कुछ लिनक्स पर देखा है, जो grepमैच को हाइलाइट करने के लिए कॉन्फ़िगर किया गया है, और मिलान फ़ाइल प्रिंट करता है।

मैं grepमैचों को हाइलाइट करने के लिए कैसे कॉन्फ़िगर कर सकता हूं ?

जवाबों:


10
alias cgrep='grep -nR --color'

उपयोग:

$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card

मेरे पसंदीदा में से एक:

$ pgrep some-hanging-process

उन सभी प्रक्रियाओं को सूचीबद्ध करेगा जो कुछ हैंगिंग-प्रक्रिया के नाम से मेल खाती हैं जिन्हें आप निम्न स्थिति में उपयोग कर सकते हैं:

$ kill $(pgrep some-hanging-process)

12
पिछले एक के लिए pkill कमांड है
डाइगा

1
जीएनयू के हाल के संस्करणों के साथ grep, grep -rआमतौर पर इसे प्राथमिकता दी जानी चाहिए grep -Rक्योंकि पूर्व में सहानुभूति नहीं होती है।
स्टीफन चेज़लस

19

मैंने पाया है कि grep को पिंप करने का सबसे अच्छा तरीका है ack का उपयोग करना , जो अनिवार्य रूप से एक इंटेलिजेंट इग्नोर लिस्ट (जैसे, खोज नहीं करता है। svn डायरेक्ट्रीज़, बैकअप फ़ाइलों को अनदेखा नहीं करता है), रिजल्ट्स के कलर हाइलाइटिंग के साथ है। perl regexps। यह वह है जो आप समय के 98.6% करने के लिए grep चाहते हैं।


5
Ack का उल्लेख करने के लिए +1। पृष्ठांकित परिणामों के लिए हाइलाइटिंग बनाए रखने के लिए --pager = "कम -R" विकल्प को शामिल करना न भूलें। यह भी ध्यान देने योग्य है कि उबंटू पर, इसे "ack-grep" के रूप में संदर्भित किया जाता है क्योंकि "ack" लिया जाता है।
शॉन चिन

मैं ack का भी उपयोग करता हूं, लेकिन कभी-कभी आपके पास यह उपलब्ध नहीं होता है ..
elmarco

2
चूँकि ack सिर्फ एक perl स्क्रिप्ट है, आप इसे कहीं भी उपलब्ध कर सकते हैं जो आपके पास perl स्थापित है, जो एक उच्च बार नहीं है।
काई

Ack यह आउट-ऑफ-द-बॉक्स डिफॉल्ट के लिए अच्छा है, लेकिन जिस समय में आपको ack को स्थापित करने में समय लगता है, आप grep के लिए कुछ डिफॉल्ट कॉन्फ़िगर कर सकते थे - इस पृष्ठ पर कहीं और मेरा उत्तर देखें। मैंने 1980 के दशक में एक बार ऐसा किया था, और तब से grep ने सब कुछ किया है। (केवल grep वास्तव में तेज है, इसके विपरीत आक के जोर से दावों के बावजूद)
जोनाथन हार्टले

7

मैंने इसे अपने .bashrc में सेट किया, बजाय एक अन्य का उपयोग किए grep को फिर से परिभाषित करने के लिए:

    export GREP_OPTIONS="--color=auto"

मेरे लिए, यह लिनक्स, मैकओएसएक्स और फ्रीबीएसडी पर काम करता है।


GREP_OPTIONSहार्मफुल माना जाना चाहिए। मैं aliasइसके बजाय उपयोग करने की सलाह देता हूं । यहां देखें: Bugs.launchpad.net/ubuntu/+bug/67141
lesmana

मैं सहमत हूं कि GREP_OPTIONS कुछ स्क्रिप्ट में समस्या हो सकती है। लेकिन जैसा कि मैंने बग 67141 में तर्क दिया था , GREP_OPTIONS उपयोगकर्ता को कई प्रकार के grep (grep, egrep, fgrep, rgrep, zgrep, bggrep, bzfgrep, bzegrep, आदि) के लिए एक विकल्प सेट करने की अनुमति देता है, जबकि एक उपनाम को सेट करने की आवश्यकता होगी। * grep के हर रूप, और कई प्रकार के grep हैं।
स्टीफन लासिवस्की

मैंने सालों (nay, दशकों) के लिए GREP_OPTIONS का उपयोग किया, लेकिन इसके कारण होने वाला नुकसान बहुत वास्तविक है। कोई भी उपकरण जो इस env var सेट के साथ grep को आमंत्रित करता है, आपके संशोधित डिफ़ॉल्ट व्यवहार को विरासत में देगा, और यह उन टूल्स को तोड़ देगा। इसके बजाय एक उपनाम या एक निष्पादन योग्य आवरण स्क्रिप्ट को परिभाषित करके इस समस्या से पूरी तरह से बचें।
जोनाथन हार्टले

लिपियों को अपने पर्यावरण को पवित्र करना होगा । कोई इफ्स, बट, या हॉवियर्स की अनुमति नहीं है। अवधि। (हां, यह पीठ के निचले हिस्से में एक शाही दर्द है ...)।
वॉनब्रांड

3

मैं पर्यावरण चर GREP_OPTIONS से ​​बचने की सलाह दूंगा, यह grep के हर आह्वान को प्रभावित करेगा, यहां तक ​​कि जो अन्य उपकरणों के भीतर एम्बेडेड हैं। यदि वे उपकरण एक तरह से व्यवहार करने के लिए grep की अपेक्षा करते हैं, और आप उस व्यवहार को बदलते हैं, तो यह उन उपकरणों को तोड़ देगा और कर देगा।

इसके बजाय, आप एक उपनाम बना सकते हैं, जो अच्छी तरह से काम करता है। यह केवल आपके इंटरेक्टिव शेल (यानी कि आप खुद टाइप करते हैं) से कॉल को प्रभावित करेंगे।

अंतिम विकल्प, जो मुझे सबसे अधिक पसंद है, वह है एक आवरण स्क्रिप्ट बनाना जो grep को आमंत्रित करती है। मैं इसे एक उपनाम से अधिक पसंद करता हूं, क्योंकि मैं इस आवरण को अन्य कार्यक्रमों से आमंत्रित कर सकता हूं। जैसे vimgrep सेट करके विम में, ताकि vim के भीतर से मेरी खोजें कमांड-लाइन पर खोज करने के लिए समान रूप से व्यवहार करें।

$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*

इसे प्रयोग करें:

$ grp pattern dir

जैसे

$ grp pattern .

वर्तमान dir और subdirs में सभी पाठ फ़ाइलों में 'पैटर्न' के उदाहरणों की खोज करेंगे।

ध्यान दें कि मैं अपनी स्क्रिप्ट को 'grep' कहने के बजाय 'grp' कहता हूं, ताकि मुझे हमेशा पता रहे कि मैं अपने अनुकूलित डिफॉल्ट्स के साथ grep को आमंत्रित कर रहा हूं या नहीं।

डिफ़ॉल्ट रूप से मैं शामिल हैं:

-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files

मुझे लगता है कि हर कोई सोर्स कंट्रोल डायर को छोड़ना चाहेगा: .hg .git .bzr .svn

'बिल्ड' और 'डिस्ट' को छोड़ना पाइथन-आईएमएस हैं, और शायद ज्यादातर लोगों पर लागू नहीं होता है। कोई संदेह नहीं है कि आप काम करते समय अपनी खुद की पहचान विकसित करेंगे।

of टैग्स ’ctags का आउटपुट है, जिसका उपयोग मैं function फंक्शन फंक्शन डेफिनिशन’ और जैसे टूल्स में करता हूं। जैसे कि इसमें मेरे स्रोत कोड से प्रत्येक शब्द और प्रतीक की कम से कम एक प्रति शामिल है, इसलिए यह आपके खोज परिणामों से लंघन के लायक है।

अंत में "$ *" के लिए बैश सिंटैक्स है "और कमांड-लाइन से अन्य सभी पैरामेट्स", इसलिए आप पैटर्न में पास हो सकते हैं और सामान्य की तरह खोज सकते हैं, और किसी भी अन्य कमांड लाइन के झंडे को ओवरराइड कर सकते हैं। ।


2

--colorविकल्प पहले से ही कई बार उल्लेख किया गया है, लेकिन मैं जोड़ने के लिए है कि यह रंग है, जिसमें मैचों के लिए एक वातावरण चर का उपयोग कर हाइलाइट किया जाएगा कॉन्फ़िगर करने के लिए संभव है करना चाहते हैं

export GREP_COLOR="1;33"

संदर्भ के लिए एएनएसआई रंग कोड का उपयोग करके रंग को एन्कोड किया जाना चाहिए

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37

1
GREP_COLORपदावनत किया गया है। GREP_COLORSइसके बजाय उपयोग करें ।
g33kz0r

2

चूँकि मैंने वास्तव में रंग सेट करने का कोई उदाहरण नहीं देखा था, यहाँ GNU grep के लिए एक सरल सेटअप है:

# turn on colors, natch.
export GREP_OPTIONS="--color=auto"

if [[ $(echotc Co) -ge 256 ]]; then
  # 256 color terminals
  export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
  # everybody else
  export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi

के बारे में सावधान रहें GREP_OPTIONS; चीजों के अलावा किसी अन्य चीज के लिए इसका इस्तेमाल न करें --color=autoया यह आपके सिस्टम पर grep का उपयोग करने वाली किसी भी स्क्रिप्ट को गड़बड़ कर देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.