मैं एक grep करना चाहता हूं \resources\। मैं यह कैसे करु?
मैंने कोशिश की:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
मैं एक grep करना चाहता हूं \resources\। मैं यह कैसे करु?
मैंने कोशिश की:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
जवाबों:
बैकस्लैश कई अनुप्रयोगों के लिए एक विशेष चरित्र है:
शेल सहित: आपको किसी अन्य बैकस्लैश या अधिक सुरुचिपूर्ण ढंग से, संभव होने पर सिंगल कोट्स का उपयोग करके इसे भागने की आवश्यकता है:
$ 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)।
कई अन्य कमांड अपने कुछ तर्कों में बैकस्लैश की व्याख्या करते हैं ... और भागने के दो स्तरों की आवश्यकता होती है (शेल व्याख्या से बचने के लिए, एक कमांड व्याख्या से बचने के लिए)।
वैसे, शेल के लिए, एकल उद्धरण '…'किसी भी प्रकार की वर्ण व्याख्या को रोकते हैं, लेकिन दोहरे उद्धरण केवल उनमें से कुछ को रोकता है: विशेष रूप से $, `और \भीतर सक्रिय वर्ण बने रहते हैं "…"।
आप भी इस्तेमाल कर सकते हैं fgrep(जो सिर्फ झंडे के grepसाथ है -F)। यह एक निश्चित स्ट्रिंग के रूप में पैटर्न की व्याख्या करने के लिए grep को बल देता है (यानी यह \एक शाब्दिक के रूप में इलाज करेगा \)। आपको शेल द्वारा विस्तार से बैकस्लैश की रक्षा करने की आवश्यकता होगी।
grep -F '\resources\'
..\और यहां तक कि '..\\'मैं अपने इच्छित परिणाम प्राप्त नहीं कर पाया। grep -F '..\'मुझे जो चाहिए वो मुझे मिल गया! धन्यवाद
grepएक बैकस्लैश का प्रतिनिधित्व करने के लिए चार बैकस्लैश की आवश्यकता होती है :
grep "\\\\resources\\\\"
grepकेवल एक बैकस्लैश से बचने के लिए 1 बैकस्लैश की आवश्यकता होती है, लेकिन शेल को भी बैकस्लैश उद्धृत करने की आवश्यकता होती है। डबल कोट्स ( ") बैकस्लैश को कोट नहीं करते हैं, लेकिन बैकस्लैश करता है, यही वजह है कि आपके उदाहरण में डबल कोट्स कुछ नहीं करते हैं और इसके बजाय 4 बैकस्लैश की आवश्यकता होती है।
grep '\\resources\\'