जब मैं लिखता हूँ
$ grep \$
फिर मैं टर्मिनल पर जो भी टाइप करता हूं, उसका मिलान किया जाता है और टर्मिनल पर प्रिंट किया जाता है। कैसे \$
व्याख्या की जा रही है?
जब मैं लिखता हूँ
$ grep \$
फिर मैं टर्मिनल पर जो भी टाइप करता हूं, उसका मिलान किया जाता है और टर्मिनल पर प्रिंट किया जाता है। कैसे \$
व्याख्या की जा रही है?
जवाबों:
खोल व्याख्या करने के तरीके \$
और रूप में ग्रेप के माध्यम से इसे पारित $
, लाइन चरित्र के अंत। तो यह मानते हुए कि आपकी लाइन का अंत है, यह :-) से मेल खाएगा
यदि आप $
grep में एक वास्तविक मिलान करना चाहते हैं , तो निम्न में से एक का उपयोग करें:
grep \\\$
grep '\$'
पूर्व में, खोल की व्याख्या \\
के रूप में \
और \$
के रूप में $
, दे रही है \$
। उत्तरार्द्ध में, यह इसकी व्याख्या बिल्कुल नहीं करता है।
जैसा कि आपके प्रश्न \$
से दो-वर्ण अनुक्रम के बजाय डॉलर के चिह्न से मेल क्यों होता है, कुछ भावों के grep
लिए विशेष वर्णों का उपयोग करने वालों की तरह नियमित अभिव्यक्ति । उनमें से कुछ हैं:
$ end of line
^ start of line
. any character
+ 1 or more of the preceeding pattern
* 0 or more of the preceeding pattern
{n,m} between n and m of the preceeding pattern
[x-y] any character between x and y (such as [0-9] for a digit).
कई अन्य लोगों के साथ।
जब आप एक शाब्दिक चरित्र से मेल खाना चाहते हैं जो सामान्य रूप से एक विशेष चरित्र के रूप में माना जाता है, तो आपको इसे बचने की आवश्यकता है ताकि grep
इसे सामान्य चरित्र के रूप में माना जाए।
ls \$
और देखें कि हमें "ls: $: ऐसी कोई फ़ाइल या निर्देशिका" नहीं मिली, यह देखने के लिए कि $ $ $ से कम है, लेकिन \\ $ unescaped से $ $ है, और इसी तरह।
शेल सबसे पहले प्रोग्राम के तर्कों को पारित करने से पहले किसी भी एस्केप सीक्वेंस का विस्तार करता है, इसलिए यह \$
एक एस्केप सीक्वेंस के रूप में व्याख्या करता है और एकल तर्क $
को पास करता है grep
, जो लाइन के अंत से मेल खाता है। चूंकि हर रेखा का अंत होता है, तो किसी भी रेखा का मिलान होना चाहिए :)
man grep
; यह निर्णय लिया गया है कि गया है $
पंक्ति के अंत से मेल खाता है या नहीं, पंक्तियों से अलग कर रहे हैं की परवाह किए बिना \n
, \r
, दोनों, या कुछ पूरी तरह से अलग। सामान्य स्थिति में, नियमित अभिव्यक्तियों का उपयोग किसी भी स्ट्रिंग से मेल खाने के लिए किया जा सकता है, न कि केवल एक "लाइन" के लिए, और $
स्ट्रिंग के अंत से मेल खाने के लिए उपयोग किया जाता है।
इसकी व्याख्या लाइन-मेटेक्रेचर के अंत के रूप में की जा रही है। यदि आप वास्तविक डॉलर के चिह्न का मिलान करना चाहते हैं, तो करें
$ grep \\$
या
$ grep '\$'
echo \$
और फिरecho \\$