grep: पीछे की ओर पीछे चलना


23

मैं एक grep करना चाहता हूं \resources\। मैं यह कैसे करु?

मैंने कोशिश की:

grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"

इनमें से कोई काम नहीं करता


5
बैकस्लैश की बैश व्याख्या से बचने के लिए डबल कोट्स के बजाय सिंगल कोट्स का उपयोग करें। grep '\\resources\\'
पॉल टॉम्बलिन

जवाबों:


27

बैकस्लैश कई अनुप्रयोगों के लिए एक विशेष चरित्र है:

  • शेल सहित: आपको किसी अन्य बैकस्लैश या अधिक सुरुचिपूर्ण ढंग से, संभव होने पर सिंगल कोट्स का उपयोग करके इसे भागने की आवश्यकता है:

    $ printf '%s\n' foo\\bar 'foo\bar'
    foo\bar
    foo\bar
    

    यहां कमांड को मूल्य के साथ दो तर्क मिले foo\bar, जो कि टर्मिनल पर गूंज रहे थे।

    (ऊपर, मैंने कई क्रियान्वयन के printfबजाय बैकस्लैश की व्याख्या भी की है) (यहाँ बैकस्पेस वर्ण में विस्तार होगा )।echoecho\b

  • लेकिन बैकस्लैश भी इसके लिए एक विशेष चरित्र है grep। यह आदेश जैसे कई विशेष दृश्यों को पहचानता है \(, \|, \., और इतने पर। तो इसी तरह आपको \\वास्तविक बैकस्लैश चरित्र के लिए डबल के साथ grep खिलाना होगा । इसका मतलब यह है कि शेल का उपयोग करके आपको टाइप करना होगा:

    grep 'foo\\bar'
    

    या समकक्ष:

    grep foo\\\\bar
    

    (दोनों पंक्तियाँ शेल को foo\\barतर्क के रूप में प्रसारित करने के लिए कहती हैं grep)।

  • कई अन्य कमांड अपने कुछ तर्कों में बैकस्लैश की व्याख्या करते हैं ... और भागने के दो स्तरों की आवश्यकता होती है (शेल व्याख्या से बचने के लिए, एक कमांड व्याख्या से बचने के लिए)।


वैसे, शेल के लिए, एकल उद्धरण '…'किसी भी प्रकार की वर्ण व्याख्या को रोकते हैं, लेकिन दोहरे उद्धरण केवल उनमें से कुछ को रोकता है: विशेष रूप से $, `और \भीतर सक्रिय वर्ण बने रहते हैं "…"


18

आप भी इस्तेमाल कर सकते हैं fgrep(जो सिर्फ झंडे के grepसाथ है -F)। यह एक निश्चित स्ट्रिंग के रूप में पैटर्न की व्याख्या करने के लिए grep को बल देता है (यानी यह \एक शाब्दिक के रूप में इलाज करेगा \)। आपको शेल द्वारा विस्तार से बैकस्लैश की रक्षा करने की आवश्यकता होगी।

grep -F '\resources\'

ध्वज वहाँ एक कारण के लिए है! मैं के लिए grep करने की कोशिश कर रहा था ..\और यहां तक ​​कि '..\\'मैं अपने इच्छित परिणाम प्राप्त नहीं कर पाया। grep -F '..\'मुझे जो चाहिए वो मुझे मिल गया! धन्यवाद
FreeSoftwareServers

.. उस टिप्पणी को सही ढंग से प्रारूपित करने का प्रयास करें! -> meta.stackexchange.com/questions/201663/…
FreeSoftwareServers

3

grepएक बैकस्लैश का प्रतिनिधित्व करने के लिए चार बैकस्लैश की आवश्यकता होती है :

grep "\\\\resources\\\\"

12
यह एक अधिक भ्रामक ओवरसिलेशन है। grepकेवल एक बैकस्लैश से बचने के लिए 1 बैकस्लैश की आवश्यकता होती है, लेकिन शेल को भी बैकस्लैश उद्धृत करने की आवश्यकता होती है। डबल कोट्स ( ") बैकस्लैश को कोट नहीं करते हैं, लेकिन बैकस्लैश करता है, यही वजह है कि आपके उदाहरण में डबल कोट्स कुछ नहीं करते हैं और इसके बजाय 4 बैकस्लैश की आवश्यकता होती है।
jw013

मुझे विंडोज में चार बैकस्लैश का उपयोग करना पड़ा, भले ही विंडोज कमांड-प्रॉम्प्ट बैकस्लैश का इलाज नहीं करता है जैसे * निक्स करता है। मुझे आश्चर्य है कि अगर ग्नूविन बंदरगाहों ने शेल के प्रभाव को गलत समझा और 4-स्लेश की आवश्यकता को कोडित किया, तो यह सोचकर कि यह आवश्यक था grep
19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.