शब्द सीमा के बारे में उलझन


13

मैं इस पर काफी शोध कर रहा हूं, लेकिन मैं अभी भी इस पर स्पष्ट नहीं हूं। शब्द सीमा का क्या अर्थ है? यह क्या करता है?

इसलिए, उदाहरण के लिए, क्या कोई मुझे इस आदेश की व्याख्या कर सकता है?

egrep '\b[A-Z]+\b' filename.sh

1
एक "शब्द सीमा" जो भी उपकरण का इस्तेमाल किया जाता है वह इस तरह परिभाषित करता है ... कुछ लोग शब्द / स्थान या स्थान / शब्द को एक सीमा मानते हैं, तो दूसरे "शब्द" को शब्द से मानते हैं [azA-Z0-9_]egrep(1)उपयोग में आने वाले नियमित भावों के लिए मैन्युअल रूप से , संभवतः विचलन की जाँच करें।
वॉनब्रांड

जवाबों:


12

जैसा कि यहाँ वर्णित है , उदाहरण के लिए, यह शब्दों के बीच मेल खाता है :

शब्द सीमा के रूप में योग्य तीन अलग-अलग पद हैं:

  1. स्ट्रिंग में पहले चरित्र से पहले, यदि पहला वर्ण एक शब्द चरित्र है।
  2. स्ट्रिंग में अंतिम वर्ण के बाद, यदि अंतिम वर्ण एक शब्द वर्ण है।
  3. तार में दो वर्णों के बीच, जहाँ एक शब्द वर्ण है और दूसरा शब्द वर्ण नहीं है।

यहाँ उन मामलों में से प्रत्येक के उदाहरण हैं:

  1. स्ट्रिंग के लिए foobar, पहला मामला मेल खाता है

     foobar
    ^-----here
    
  2. स्ट्रिंग के लिए foobar, दूसरा मामला मेल खाता है

    foobar
          ^--here
    
  3. स्ट्रिंग के लिए foo bar, तीसरा मामला मेल खाएगा

    foo bar
       ^--here, because space is not a word character
    

एक शब्द चरित्र के रूप में क्या योग्यता विशिष्ट नियमित अभिव्यक्ति कार्यान्वयन पर निर्भर करती है। हालांकि, सभी मामलों में, अक्षर ( [a-z]और [A-Z]), संख्या ( [0-9]) और _शब्द अक्षर माने जाते हैं।


तो, आपके द्वारा पोस्ट किया गया उदाहरण रेगेक्स ( \b[A-Z]+\b) का अर्थ है सबसे लंबी स्ट्रिंग जो दो शब्द सीमाओं के बीच है और जिसमें केवल ऊपरी अक्षर हैं। उदाहरण द्वारा समझाना आसान हो सकता है:

echo "FOOBAR" | egrep '\b[A-Z]+\b'   # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b'  # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b'   # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars

उत्कृष्ट स्पष्टीकरण, बस ध्यान दें कि सोलारिस ' egrep(न ही /usr/xpg4/bin/egrep) \bइस तरह से व्यवहार नहीं करता है । उदाहरण के लिए, echo "FOOBAR" | egrep '\b[A-Z]+\b'मिलान नहीं होगा।
पीटर

0
egrep '\b[A-Z]+\b' filename.sh

इसे तोड़ दो:

  1. [A-Z]चरित्र वर्ग में किसी एक चरित्र का प्रतिनिधित्व करता है [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
  2. [A-Z]+ऊपरी मामले के पात्रों में से एक या अधिक घटना का प्रतिनिधित्व करता है। : उदाहरण मैचों होगा A, HELLO, IS, I, ELEPHANT, आदि
  3. '\bINDIA\b': बिल्कुल INDIAऊपरी मामले में एक शब्द की खोज की तरह है । यह मैच नहीं होगा INDIANA। इस प्रकार एक ही सिद्धांत को लागू '\b[A-Z]+\b'करना - ऊपरी मामलों में एक या अधिक अक्षरों वाले पूरे शब्दों की तलाश करेगा।
  4. इस प्रकार egrep '\b[A-Z]+\b' filename.shफ़ाइल में ऊपरी मामले में सभी एक या अधिक अक्षरों वाले शब्दों की खोज होगी - filename.sh

\b - बिल्कुल एक पूरे शब्द खोज की तरह है।

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