क्या मैक ओएस एक्स में एक कमांड है जो मल्टीलाइन रेगेक्स खोज कर सकता है?


12

मैं एक सरल regex खोज एक निर्देशिका के माध्यम से पुनरावर्ती करना चाहता हूं जो एकल लाइनों तक सीमित नहीं है।

मैंने grep और ack की कोशिश की, लेकिन न तो इस का समर्थन करता हूं।

मुझे पता है कि यह बहुत अधिक महंगा नहीं होना चाहिए (मेरे मामले में) क्योंकि मेरी पसंद का पाठ संपादक ( उदात्त पाठ ) केवल ठीक कर सकता है।

मैं बस इस के एक साधारण कमांड लाइन संस्करण की तलाश कर रहा हूं। Google ने pcregrep को बदल दिया है , लेकिन मुझे मैक के लिए वह नहीं मिल रहा है। क्या मैं सिर्फ सही जगह नहीं देख रहा हूँ?


1
आप जो खोज रहे हैं उसका एक उदाहरण देना उपयोगी होगा। और grepक्या आप चाहते हैं ( -C1) संदर्भ के संदर्भ में मदद करता है ?
mbb

जवाबों:


15

Homebrew स्थापित करें और फिर:

brew install pcre

यह आपको नवीनतम देगा pcregrep


1

आपने बिलकुल नहीं कहा कि आप क्या देख रहे हैं, इसलिए मुझे यह पता लगाने के लिए कार्य की कल्पना करनी चाहिए कि क्या फ़ाइल में 223 के बाद 112 है, नई रूपरेखाओं की उपेक्षा।

एक छोटा सा awkसमाधान:

awk -vRS='' '/112.*223/ { print "found it"; exit }' file.in

RSचर रिकॉर्ड विभाजक शामिल हैं। इसे खाली स्ट्रिंग पर सेट करके, पूरी फाइल को एक रिकॉर्ड के रूप में पढ़ा जाएगा।

यह बड़ी फ़ाइलों पर संभवतया बहुत स्मृति अक्षम होगा।

वैसे, मैं OpenBSD पर ऐसा कर रहा हूं, लेकिन OS X को उसी तरह काम करना चाहिए।


मैं OS X 10.11.2 पर हूं और "awk: अमान्य -v विकल्प" प्राप्त कर रहा हूं
HaggleLad

OS X में आपको vऔर के बीच की जगह चाहिए RS। यानीawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
नील

0

"pcregrep" एक पुराने स्थिर pcregrepऔर एक नए को संदर्भित कर सकता है pcre2grep। दोनों पीसीआरई परियोजनाpcre.org द्वारा प्रदान किए गए हैं ।

मैक पोर्ट्स पोर्ट के हिस्से के रूप में पूर्व प्रदान करता है pcre(संस्करण 8.40 पर स्थिर), और पोर्ट के हिस्से के रूप में उत्तरार्द्ध pcre2(वर्तमान में 10.22 संस्करण)। इसके माध्यम से स्थापित करें:

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