Grep में नई लाइन के लिए एक पैटर्न कैसे दें? शुरुआत में नई लाइन, अंत में नई लाइन। नियमित अभिव्यक्ति का तरीका नहीं। कुछ ऐसा है \ n
$। यह कुछ हद तक सीमित है, लेकिन सरल मामलों में प्रयोग करने योग्य है।
Grep में नई लाइन के लिए एक पैटर्न कैसे दें? शुरुआत में नई लाइन, अंत में नई लाइन। नियमित अभिव्यक्ति का तरीका नहीं। कुछ ऐसा है \ n
$। यह कुछ हद तक सीमित है, लेकिन सरल मामलों में प्रयोग करने योग्य है।
जवाबों:
grep पैटर्न को व्यक्तिगत रेखाओं के विरुद्ध मिलान किया जाता है ताकि इनपुट में मिली एक नई रेखा से मेल खाने के पैटर्न के लिए कोई रास्ता न हो।
हालाँकि आप इस तरह खाली लाइनें पा सकते हैं:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
pcregrepनियमित के बजाय कोशिश करें grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
-Mविकल्प यह, कई पंक्तियों भर में मैच के लिए है ताकि आप के रूप में नई-पंक्तियों के लिए खोज सकते की अनुमति देता है \n।
आप इस तरह से उपयोग कर सकते हैं ...
grep -P '^\s$' file
-Pपर्ल रेगुलर एक्सप्रेशंस (POSIX के लिए एक एक्सटेंशन grep) के लिए उपयोग किया जाता है ।\sसफेद अंतरिक्ष वर्णों का मिलान करें; यदि इसके बाद *, यह एक खाली रेखा से भी मेल खाता है।^लाइन की शुरुआत से मेल खाता है। $रेखा के अंत से मेल खाता है। -Pएक GNU एक्सटेंशन है। जब स्थिति इसके लिए कॉल करती है तो मैं इसका उपयोग करने के लिए ठीक हूं (आमतौर पर लुकहैड / लुकबाइंड), लेकिन पॉसिक्स ग्रीप यह सिर्फ फाइल के साथ कर सकता है [[:space:]]।
-P। GNU वैसे भी काफी मानक है। :)
brew install grepग्नू ग्रीप प्राप्त करना चाहेंगे , जो कई मायनों में बेहतर है। apple.stackexchange.com/questions/193288/...
@Jarno के लिए धन्यवाद, मुझे -z विकल्प के बारे में पता है और मुझे पता चला कि जब -२ विकल्प के साथ GNU grep का उपयोग किया \nजाता है , तो इसके खिलाफ मिलान संभव है । :)
उदाहरण:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
प्रिंटों bar
वर्कअराउंड के लिए (बिना पोर्टेबल का उपयोग किए बिना -P), आप अस्थायी रूप से एक नई-लाइन के चरित्र को अलग से बदल सकते हैं और इसे बदल सकते हैं, जैसे:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
मूल रूप से यह सटीक मैच की तलाश में है, _foo_जहां _इसका मतलब है \n(इसलिए __= \n\n)। आपको इसे वापस अनुवाद करने की आवश्यकता नहीं है tr '_' '\n', क्योंकि प्रत्येक पैटर्न को नई पंक्ति में वैसे भी मुद्रित किया जाएगा, इसलिए निकालना _पर्याप्त है।
<(p paste -sd_ file )?
new line at the beginningएक रिक्त रेखा है औरnew line at endफ़ाइल में प्रत्येक पंक्ति पर लागू होती है। क्या आप एक उदाहरण पोस्ट कर सकते हैं?