पूरे शब्द के लिए कैसे grep


87

मैं उप कमांड में grep सामान के लिए निम्न कमांड का उपयोग कर रहा हूं

find . | xargs grep -s 's:text'

हालाँकि, यह भी सामान की तरह लगता है <s:textfield name="sdfsf"...../>

मैं इससे बचने के लिए क्या कर सकता हूं ताकि यह सामान जैसा लगे <s:text name="sdfsdf"/>

या उस बात के लिए .... भी पाता है <s:text somethingElse="lkjkj" name="lkkj"

मूल रूप से s:textऔर nameएक ही लाइन पर होना चाहिए ...।


29
क्या किसी ने शीर्षक को "पूरी दुनिया के लिए कैसे जीआरईपी" के रूप में पढ़ा ?
अर्लज़

15
@ एर्लज़, नहीं, ज्यादातर इसलिए क्योंकि मैंने "पूरे शब्द" को गूगलेड किया।
ल्यूक

जवाबों:


104

आप -wयह निर्दिष्ट करना चाहते हैं कि यह एक शब्द का अंत है।

find . | xargs grep -sw 's:text'


70

\b"शब्द सीमाओं" पर मिलान करने के लिए उपयोग करें , जो आपके खोज को पूरे शब्दों पर ही बना देगा।

तो आपका grep कुछ ऐसा दिखेगा

grep -r "\bSTRING\b"

रंग और लाइन नंबर जोड़ने से भी मदद मिल सकती है

grep --color -rn "\bSTRING\b"

Http : //www . अनियमित-expressions.info/wordboundaries.html से :

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

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

28

आप xargsआवर्ती तरीके से grep सर्च कर कमांड को ड्रॉप कर सकते हैं । और आपको सामान्य रूप से 's' ध्वज की आवश्यकता नहीं है। इसलिये:

grep -wr 's:text' 

1

आप rg, https://github.com/BurntSushi/ripgrep आज़मा सकते हैं :

rg -w 's:text' . 

करना चाहिए


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। - रिव्यू से
जिबिन बालाचंद्रन

4
मैंने उत्तर प्रदान किया: rg -w 's: text'।
ms4720

1
एक गैर-मानक उपकरण का सुझाव देने के अन्य कारण हो सकते हैं, लेकिन एक सवाल के समाधान के रूप में कि मानक के साथ इसे कैसे हल किया जाए यह grepविशेष रूप से सम्मोहक या संतोषजनक नहीं है, विशेष रूप से दिया गया grepहै जिसमें समान विकल्प है।
ट्रिपल

यह इस बात पर निर्भर करता है कि
डायरेक्टरी

यह फाइलों की संख्या पर निर्भर करता है, रिपरग्रेप बहुत तेज हो सकता है और प्रत्येक फ़ाइल के लिए खोज-> xargs एक नई प्रक्रिया बनाता है।
ms4720

0

यदि आप शेष पाठ भाग को फ़िल्टर करना चाहते हैं, तो आप ऐसा कर सकते हैं।

xargs grep -s 's:text '

यह s:textअंतिम टी के बाद एक स्थान के साथ केवल उदाहरणों को ढूंढना चाहिए । यदि आपको s:textऐसे उदाहरणों को खोजने की आवश्यकता है जिनमें केवल एक नाम तत्व है, तो या तो अपने परिणामों को दूसरी grepअभिव्यक्ति के लिए पाइप करें , या केवल उन तत्वों को फ़िल्टर करने के लिए regex का उपयोग करें जिनकी आपको आवश्यकता है।


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