grep में नई लाइन के लिए पैटर्न कैसे देना है? शुरुआत में नई लाइन, अंत में नई लाइन। नियमित अभिव्यक्ति तरीका नहीं है। कुछ \ n।grep में नई लाइन के लिए पैटर्न कैसे दें?
उत्तर
grep
पैटर्न व्यक्तिगत लाइनों के खिलाफ मेल खाते हैं इसलिए इनपुट में मिली नई लाइन से मेल खाने के लिए पैटर्न का कोई तरीका नहीं है।
लेकिन अगर आप इस तरह खाली लाइनों पा सकते हैं:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
कम से कम जीएनयू grep के पास -z विकल्प है जो शून्य चरित्र द्वारा grep ब्रेक लाइन बनाता है। हालांकि, यह न्यूलाइन से मेल खाने के लिए पैटर्न में नई लाइन या \ n का समर्थन नहीं करता है, [बग रिपोर्ट] देखें (https://bugs.launchpad.net/ubuntu/+source/grep/+bug/1641092)। – jarno
@jarno यह -P ध्वज – rubystallion
आप इस तरह से उपयोग कर सकते हैं ...
grep -P '^\s$' file
-P
(एक विस्तार POSIXgrep
करने के लिए पर्ल नियमित अभिव्यक्ति के लिए प्रयोग किया जाता है)।\s
सफेद स्पेस वर्णों से मेल खाता है; यदि*
के बाद, यह एक खाली रेखा से भी मेल खाता है।^
लाइन की शुरुआत से मेल खाता है।$
लाइन के अंत से मेल खाता है।
'-P' के साथ पैटर्न में \ n समर्थन करता है एक जीएनयू एक्सटेंशन है।स्थिति का उपयोग करने के लिए मैं ठीक हूं (आमतौर पर लुकहेड/लुकहेइंड), लेकिन POSIX grep यह सिर्फ '[[: space:]]' के साथ फ़ाइल कर सकता है। – jordanm
एफडब्ल्यूआईडब्ल्यू, सोलारिस 'और बीएसडी के जीआरपी मैनपेज (दूसरों की जांच नहीं की गई) दोनों के पास' -पी 'के लिए एक पैराग्राफ है। वैसे भी जीएनयू काफी मानक है। :) –
perl regex के लिए +1 :) – mattexx
नियमित grep
के बजाय pcregrep
कोशिश:
pcregrep -M "pattern1.*\n.*pattern2" filename
-M
विकल्प यह कई पंक्तियों में मैच के लिए अनुमति देता है, तो आप \n
के रूप में नई-पंक्तियों के लिए खोज सकते हैं।
बिल्कुल मैं देख रहा था, धन्यवाद! – yorch
वैकल्पिक हल के लिए, आप अस्थायी अलग चरित्र के साथ नए-लाइन की जगह है और इसे वापस बदल सकते हैं, जैसे (गैर पोर्टेबल -P
का उपयोग किए बिना) के लिए के रूप में:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
कहाँ वह सटीक मिलान _foo_
जहां _
साधन की तलाश में \n
(इसलिए __
= \n\n
)। आपको इसे tr '_' '\n'
द्वारा वापस अनुवाद करने की आवश्यकता नहीं है, क्योंकि प्रत्येक पैटर्न को नई लाइन में मुद्रित किया जाएगा, इसलिए _
को हटा देना पर्याप्त है।
धन्यवाद मैं -z विकल्प के बारे में पता करने के लिए @jarno और मुझे पता चला है कि जब -पी विकल्प के साथ जीएनयू ग्रेप का उपयोग कर, \n
के खिलाफ मिलान संभव है। :)
उदाहरण:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
प्रिंटों bar
- 1. नई लाइन के साथ grep परिणाम कैसे संरक्षित करें?
- 2. grep को पिछली नई लाइन प्रिंट करने से कैसे रोकें?
- 3. केवल लाइन नंबर के लिए फास्ट grep/grep?
- 4. बैश: कमांड आउटपुट से grep पैटर्न
- 5. फ़ाइलवाइटर में नई लाइन
- 6. grep (बीएसडी grep) 2.5.1- मैक ओएस 10.8 लाइन regexp मोड पर फ्रीबीएसडी ओवरलैपिंग पैटर्न
- 7. grep
- 8. फ़ाइल से "grep" पैटर्न कैसे बनाएं?
- 9. नई लाइन
- 10. ack-grep के साथ कई पैटर्न?
- 11. लाइन ब्रेक के साथ Grep खोज तार
- 12. नई लाइन
- 13. नई लाइन
- 14. नई लाइन
- 15. डिस्क स्पेस भरने के बिना टैर आर्काइव में फ़ाइलों में पैटर्न के लिए grep कैसे करें
- 16. एकाधिक फ़ाइलों पर एकाधिक पैटर्न के लिए Grep
- 17. लाइन नंबर खोजें जहां "grep"
- 18. टेक्स्ट एरिया में नई लाइन
- 19. नई लाइन वर्ण
- 20. 'grep -f' के बारे में: फ़ाइल
- 21. लाइन पर पहले मैच में grep stop कैसे बनाएं?
- 22. आउटपुट बिना नई लाइन
- 23. नई लाइन चरित्र
- 24. jQuery नई लाइन \ N
- 25. जावास्क्रिप्ट नई लाइन
- 26. एक नई लाइन
- 27. जावास्क्रिप्ट एक नई लाइन
- 28. PHP SimpleXML नई लाइन
- 29. मैं नई लाइन
- 30. मैं ज़िप्ड टेक्स्ट फ़ाइल में टेक्स्ट पैटर्न के लिए कैसे grep कर सकता हूं?
यह स्पष्ट नहीं है कि आप क्या चाहते। 'शुरुआत में नई लाइन' एक खाली रेखा है और फ़ाइल में प्रत्येक पंक्ति पर 'अंत में' नई पंक्ति लागू होती है। क्या आप एक उदाहरण पोस्ट कर सकते हैं? –
वास्तव में आप केवल '$' का उपयोग कर सकते हैं। यह कुछ हद तक सीमित है, लेकिन सरल मामलों में प्रयोग योग्य है। –
https://www.gnu.org/software/grep/manual/grep.html#Usage आइटम देखें 15. – jarno