कम अंदर grep?


58

मैं वर्तमान में कुछ मुद्दों की तलाश में बहुत से अपरिचित लॉग के माध्यम से स्थानांतरित कर रहा हूं। पहली फ़ाइल जो मैं देख रहा हूं, वह Event.log है, और मुझे कम से कम तीन पृष्ठ मिलते हैं lessजिसमें एक ही घटना को अलग-अलग समय पर प्रदर्शित किया जाता है - एक घटना जो काफी सौम्य प्रतीत होती है। मैं इस ईवेंट को फ़िल्टर करना चाहूंगा, और वर्तमान में मैं इसे छोड़ दूंगा lessऔर कुछ ऐसा करूंगा

grep -v "event text" Events.log | less

यह अब कई अन्य सामान्य, अबाधित घटनाओं को लाता है जिन्हें मैं भी फ़िल्टर करना चाहूंगा। वहाँ एक तरह से मैं कर सकते हैं grep -v अंदर की less? करने के बजाय

egrep -v "event text|something else|the other thing|foo|bar" Events.log | less

यह किसी भी तरह की लॉग फ़ाइल को देखते समय मुझे एक उपयोगी विशेषता के रूप में प्रहार करता है - और अगर lessयह उपकरण नहीं है, तो क्या मैं चाहता हूं कि गुणों के साथ एक और है? lessमें निर्मित के साथ बस -स्टाइल दर्शक grep

जवाबों:


91

lessबहुत शक्तिशाली पैटर्न मिलान है। से आदमी पेज :

&pattern

    केवल वही लाइनें प्रदर्शित करें pattern, जो मेल खाती हैं ; जो रेखाएँ मेल नहीं खाती हैं, pattern वे प्रदर्शित नहीं होती हैं। यदि patternखाली है (यदि आप &तुरंत इसके बाद टाइप करते हैं ENTER), तो कोई भी फ़िल्टरिंग बंद हो जाती है और सभी लाइनें प्रदर्शित होती हैं। फ़िल्टरिंग प्रभावी होने के दौरान, प्रॉम्प्ट की शुरुआत में एक एम्परसेंड प्रदर्शित किया जाता है, एक अनुस्मारक के रूप में कि फ़ाइल में कुछ लाइनें छिपी हो सकती हैं।

    कुछ वर्ण में के रूप में विशेष कर रहे हैं /आदेश :

    ^N या !

      केवल उन पंक्तियों को प्रदर्शित करें जो मेल नहीं खाती हैं pattern
    ^R
      नियमित अभिव्यक्ति मेटाचैकर्स की व्याख्या न करें; यही है, एक सरल पाठ की तुलना करें।

    ____________
    कुछ वर्ण विशेष अगर की शुरुआत में दर्ज की गई हैं pattern; वे का हिस्सा बनने के बजाय खोज के प्रकार को संशोधित करते हैं pattern

   (बेशक ^Nऔर ^Rप्रतिनिधित्व करते हैं Ctrl+ N और Ctrl+ R, क्रमशः।) 

इसलिए, उदाहरण के लिए, &dnsपैटर्न से मेल खाने वाली केवल लाइनों को प्रदर्शित करेगा dns, और &!dnsउन लाइनों को फ़िल्टर (बाहर) करेगा, केवल उन लाइनों को प्रदर्शित करेगा जो पैटर्न से मेल नहीं खाते हैं।

/कमांड के विवरण में यह नोट किया गया है कि

    patternके रूप में आपके सिस्टम के द्वारा आपूर्ति की नियमित अभिव्यक्ति पुस्तकालय द्वारा मान्यता प्राप्त, एक रेगुलर एक्सप्रेशन है।

इसलिए

  • &eth[01]  युक्त लाइनों को प्रदर्शित करेगा eth0याeth1
  • &arp.*eth0arpइसके बाद वाली लाइनें प्रदर्शित करेगाeth0
  • &arp|dns  युक्त लाइनों को प्रदर्शित करेगा arpयाdns

और !उपरोक्त में से कोई भी उल्टा कर सकता है। तो आप अपने प्रश्न में उदाहरण के लिए जिस कमांड का उपयोग करना चाहते हैं वह है:

&!event text|something else|the other thing|foo|bar

इसका उपयोग करें और खोज करने के लिए (और / अगले / पिछले जाने के लिए)।/pattern?patternnN


1
यह लगभग वहाँ है! में less'& <! लाइनें जो पहले पैटर्न से मेल खाती थीं और छिपी हुई थीं, अब दिखाई दे रही हैं। बहुत करीब है!
forquare

@forquare: एक कमांड हिस्ट्री है जिसे आप ऊपर और नीचे तीर कुंजी के साथ एक्सेस कर सकते हैं। तो दबाएँ &!और फिर एक तीर कुंजी दबाएँ।
PM 2Ring

@forquare: और मुझे अभी पता चला है कि इतिहास बच गया है, इसलिए आपके पुराने पैटर्न अगली बार आपके द्वारा चलाने पर उपलब्ध होंगे less; मुझे नहीं पता कि यह रिबूट करने के बाद संरक्षित है, हालांकि।
PM 2Ring

1
@orion जो पिछली बिट थी मैं गायब था - पैटर्न को एक साथ कैसे जोड़ा जाए। हालांकि मैंने पहले पाइप के प्रतीक की कोशिश की थी और यह विफल हो गया था, लेकिन अब मैं फिर से कोशिश करता हूं कि यह काम करे! तो: & <! <Pattern1> | <pattern2> | <pattern3> pattern1 या pattern2 या pattern3 के साथ लाइनों को हटा देगा
forquare

1
मैं यह समझ गया। होमब्रेव डुप्स का नवीनतम संस्करण है। मुझे बस बैश को मारना था क्योंकि यह सही फ़ाइल को हथियाना नहीं था (भले ही मुझे बताया गया था कि यह उपयोगकर्ता / स्थानीय / बिन / कम हथियाने वाला था)।
पालक

7

ओरियन के उत्तर पर निर्माण , less(1)मैन पेज का वर्णन करता है

/pattern

    एन युक्त लाइन के लिए फाइल में आगे खोजें pattern।  एन N डिफॉल्ट्स 1. 1. patternएक नियमित अभिव्यक्ति है, जो आपके सिस्टम द्वारा आपूर्ति की गई नियमित अभिव्यक्ति लाइब्रेरी द्वारा मान्यता प्राप्त है। खोज दूसरी पंक्ति में शुरू होती है (लेकिन देखें -aऔर -jविकल्प, जो इसे बदलते हैं)।

    यदि शुरुआत में प्रवेश किया जाए तो कुछ पात्र विशेष हैं pattern; वे इसका हिस्सा बनने के बजाय खोज के प्रकार को संशोधित करते हैं pattern:

    ^N या !

      उन पंक्तियों की खोज करें, जिनका मिलान नहीं होता है pattern
    ^E या *
      कई फाइलें खोजें। यानी, यदि खोज बिना मिलान के वर्तमान फ़ाइल के END तक पहुंच जाती है, तो कमांड लाइन सूची में अगली फ़ाइल में खोज जारी रहती है।
    ^F या @
      कमांड लाइन सूची में पहले फ़ाइल की पहली पंक्ति में खोज शुरू करें, चाहे स्क्रीन पर -aया -jविकल्पों की सेटिंग्स पर वर्तमान में प्रदर्शित किया गया हो ।
    ^K
      patternवर्तमान स्क्रीन पर मेल खाने वाले किसी भी पाठ को हाइलाइट करें , लेकिन पहले मैच (KEEP वर्तमान स्थिति) पर न जाएं।
    ^R
      नियमित अभिव्यक्ति मेटाचैकर्स की व्याख्या न करें; यही है, एक सरल पाठ की तुलना करें।

    ____________
    आदेश, एक दशमलव संख्या से पहले किया जा सकता है कहा जाता है एन विवरण में ...

   (बेशक ^Nऔर ^E, आदि, प्रतिनिधित्व Ctrl+ Nऔर Ctrl+ E, आदि) 

यह पता चला है और एक साथ अच्छी तरह से काम करते हैं। उदाहरण के लिए, आज्ञा&pattern/pattern

  • &!arp|dnsEnter
  • /Ctrl+Kfail|fatal|fault|sd[a-z][0-9]Enter

या तो आदेश में टाइप, छुपा देगा (को बाहर) युक्त सभी लाइनों arpया dns(जैसे grep -v), और फिर, शेष लाइनों में, की सभी घटनाओं पर प्रकाश डाला fail, fatal, fault, या कुछ भी है कि एक SCSI डिवाइस का नाम (की तरह दिखता है sd[a-z][0-9])। ध्यान दें कि जिन लाइनों में arpया dns, और भी failया किसी भी अन्य खतरे वाले शब्द हैं, उन्हें प्रदर्शित नहीं किया जाएगा।


2

पिछले कुछ महीनों में, मैं कुछ हद तक आसक्त हो गया हूं fzf

आपके मामले में, जब तक संदर्भ की जरूरत के रूप में नहीं है (यानी, ग्रेप के बराबर की -A, -Bया -Cकी जरूरत नहीं है, और वैसे, कम की &भी एक ही सीमित है), तो fzf एक बहुत शक्तिशाली उपकरण है।

यहाँ एक मूर्खतापूर्ण उदाहरण है:

printf "%s\n" {aa,bb,cc}{dd,ee,ff}{gg,hh,ii} | fzf

यदि आप उसे चलाते हैं, और जैसे इनपुट्स के साथ खेलते हैं aa | bb dd | ee !gg !hh, तो आप जल्दी से देखेंगे कि क्या हो रहा है।

|ऑपरेटर पर Fzf का दस्तावेज़ विरल है, लेकिन मेरा सबसे अच्छा अनुमान है कि यह केवल पहले और बाद में तुरंत लागू होता है, जिसका अर्थ है, प्रभाव में, या यह पूर्ववर्तीता लेता है और (जो निहित है ; सभी शर्तें डिफ़ॉल्ट रूप से AND-ed हैं । लेकिन ज्यादातर मामलों में यह एक मुद्दा नहीं होना चाहिए, और चीजें मेरे अनुभव में ठीक हैं।

इसे आजमा कर देखें। यह आश्चर्यजनक रूप से उपयोगी पाया गया है जब यह चीजों को ब्राउज़ करने की बात आती है जब मैं वास्तव में निश्चित नहीं हूं कि मैं क्या देख रहा हूं, और जब संदर्भ कोई मायने नहीं रखता है।

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