दिलचस्प पोस्ट
मैं अपने पर्ल स्क्रिप्ट को कैसे संकलित कर सकता हूं ताकि सिस्टम को बिना पर्ल इंस्टॉल किए बिना निष्पादित किया जा सके? Gnuplot अंदर लूप संरचना? मैं क्रोम में एक्सएसएलटी काम कैसे कर सकता हूं? सुनिश्चित करें कि नियंत्रक में पैरामीटर रहित सार्वजनिक कन्स्ट्रक्टर त्रुटि है जीएनयू जीसीसी (जी ++): यह कई डीटीओर्स क्यों पैदा करता है? वर्तमान वर्ष जावास्क्रिप्ट में प्राप्त करें JQuery के माध्यम से इसे सबमिट किए बिना एक html5 फॉर्म मान्यता को कैसे लागू करें UTF8 के रूप में json.dumps में utf-8 ग्रंथ सहेजना, \ u एस्केप अनुक्रम के रूप में नहीं सबसे अच्छा वितरित ब्रूट फोर्स काउंटरमेयर क्या है? फ़ाइल निर्माण का समय XCode 4.x में कोड स्वत: पूर्ण / सिंटैक्स हाइलाइटिंग के साथ समस्या PHP 5 में सीआईडीआर मास्क के लिए आईपी मिलान करना? कैसे संपत्ति से एक छवि लोड करने के लिए? एपरसैंड (&) कैसे सी ++ में काम करता है? नोटपैड ++ पर विशिष्ट पंक्तियों को कैसे हटाएं?

Bash / Grep में एकल उद्धरणों से कैसे बचें?

मैं grep के साथ स्ट्रिंग के लिए खोज करना चाहता हूं जो इस तरह दिखता है:

something ~* 'bla' 

मैंने यह कोशिश की, लेकिन शेल एकल उद्धरण को हटा देता है ..

 grep -i '"something ~* '[:alnum:]'"' /var/log/syslog 

सही खोज क्या होगा?

वेब के समाधान से एकत्रित समाधान "Bash / Grep में एकल उद्धरणों से कैसे बचें?"

 grep -i "something ~\* '[[:alnum:]]*'" /var/log/syslog 

मेरे लिये कार्य करता है।

  • इसे शून्य या अधिक-मिलान वाले वर्ण बनाने के बजाय एक शाब्दिक * मैच करने के लिए पहले * से बचें:
    ~* शून्य या अधिक घटनाओं का मिलान करते हुए ~ जबकि
    something बाद ~\* अभिव्यक्ति से मेल खाता है ~*
  • चारों ओर डबल कोष्ठक का उपयोग करें :alnum: ( यहां उदाहरण देखें)
  • आपके एकल उद्धरण चिह्नों के बीच न केवल एक ही चरित्र को मैच करने के लिए [[:alnum::]] बाद * उपयोग करें, लेकिन उनमें से कई
  • एकल उद्धरणों को बचने की ज़रूरत नहीं है क्योंकि वे एक अभिव्यक्ति में निहित हैं जो कि दोहरे उद्धरण चिह्नों द्वारा सीमित हैं।

यदि आपको उद्धरण चिह्नों में उद्धरण चिह्नों की तलाश करने की ज़रूरत है, तो वहां बदसूरत संरचनाएं हैं जो यह करेंगे।

 echo 'And I said, "he said WHAT?"' 

अपेक्षित काम करता है, लेकिन घोंसले के शिकार के एक और स्तर के लिए, अपेक्षित रूप से निम्नलिखित कार्य नहीं करता है:

 echo 'She said, "And I said, \'he said WHAT?\'"' 

इसके बजाय, आपको सिंगल-उद्धृत स्ट्रिंग के बाहर भीतरी एकल उद्धरणों से बचने की आवश्यकता है:

 echo 'She said, "And I said, '\''he said WHAT?'\''"' 

या, अगर आप चाहें:

 echo 'She said, "And I said, '"'"'he said WHAT?'"'"'"' 

यह सुंदर नहीं है, लेकिन यह काम करता है। 🙂

बेशक, अगर आप चीजों को वैरिएबल में डालते हैं तो यह सब मुनाफ़ा है।

 [ghoti@pc ~]$ i_said="he said WHAT?" [ghoti@pc ~]$ she_said="And I said, '$i_said'" [ghoti@pc ~]$ printf 'She said: "%s"\n' "$she_said" She said: "And I said, 'he said WHAT?'" [ghoti@pc ~]$ 

🙂

  • चरित्र वर्गों को [[:alnum:]] (दो ब्रैकेट्स) के साथ निर्दिष्ट किया गया है
  • [[:alnum:]] केवल एक वर्ण से मिलान कर रहा है शून्य या अधिक वर्णों का मिलान करने के लिए [[:alnum:]]*
  • आप केवल " " regex उद्धृत करने के लिए उपयोग कर सकते हैं:

     grep -i "something ~\* '[[:alnum:]]*'" /var/log/syslog 

Matteo

आपकी अभिव्यक्ति के अनुसार ऐसा लगता है कि आप पहले ' का उपयोग कर रहे हैं, यदि आप एकल उद्धरणों से बचना चाहते हैं, तो आप ' उपयोग कर सकते हैं या उनका बच सकते हैं या दोहरे उद्धरणों का इस्तेमाल कर सकते हैं। वर्ग कोष्ठक या तो:

 grep -i "something \~\* '[[:alnum:]]+'" /var/log/syslog 

या

 grep -i 'something ~* \'[[:alnum:]]+\'' /var/log/syslog