grep
एक चरित्र का विचार स्थानीय-निर्भर है । यदि आप एक गैर-यूनिकोड स्थान में हैं और आप इसमें यूनिकोड वर्णों वाली फ़ाइल से grep हैं तो वर्ण गणना मेल नहीं खाएगी। यदि आप echo $LANG
तो आप जिस लोकेल में हैं उसे देखेंगे।
यदि आप ".UTF-8" के साथ समाप्त होने वाले मान LC_CTYPE
और / या LANG
पर्यावरण चर को सेट करते हैं तो आपको सही व्यवहार मिलेगा:
$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$
आप कमांड के रूप में उसी लाइन पर वेरिएबल असाइन करके केवल एक कमांड के लिए अपना लोकल बदल सकते हैं।
इस कॉन्फ़िगरेशन के साथ, मल्टी-बाइट वर्णों को एकल वर्ण माना जाता है। यदि आप गैर-एएससीआईआई वर्णों को पूरी तरह से बाहर करना चाहते हैं, तो कुछ अन्य उत्तरों में आपके लिए समाधान हैं।
ध्यान दें कि यह अभी भी चीजों को तोड़ने के लिए संभव है, या कम से कम ठीक वैसा ही न करें जो आप उम्मीद करते हैं, पात्रों के संयोजन की उपस्थिति में । आप grep
लेटीन स्माल लेटरर ई + कॉम्बिनेटर चार्ज ACUTE ABUTE के साथ LATIN SMALL LETTER E की तुलना में अलग तरीके से व्यवहार कर सकते हैं।
.
, तो कुछ ऐसाwăsd's
मेल खाएगा