एक पर्ल एक लाइनर में मुद्रण मिलान उपसमूह


0

मेरे पास रेग्क्स है [1]

(/foo/bar/(GW|GREV)[^/]*).*

मैं GNU sed के साथ काम करने के लिए इसे प्राप्त करने में सक्षम था

sed -n 's/\(\/foo\/bar\/\(GW\|GREV\)[^\/]*\).*/\1/p'

लेकिन यह एक आधुनिक GNU sed था और मैं Solaris 10 में एक प्राचीन सेड के साथ हूँ। शायद इसे पोर्ट करना संभव है लेकिन यह मेरी क्षमता से परे है। हालांकि, मेरे पास मेरे पास 5.8 उपलब्ध हैं, इसलिए मेरा सवाल है: मैं एक पर्ल लाइनर में मिलान किए गए उपसमूह को कैसे प्राप्त कर सकता हूं?


[1] इसका सार यह है कि मैं सभी निर्देशिकाओं का मिलान करना चाहता हूं जो प्रपत्र / foo / bar / GWxxx, / foo / bar / GREVxxx से मेल खाते हैं और उस मूल निर्देशिका को प्रिंट करते हैं। तो निम्नलिखित तार के लिए, मैं हमेशा मिलता हूं /foo/bar/GREV123 पकड़े गए समूह के रूप में:
/foo/bar/GREV123
/foo/bar/GREV123/
/foo/bar/GREV123/etc

आपने कोशिश की है grep? gnu.org/software/grep/manual/grep.html एक लिस्टिंग पाने के लिए काफी आसान होगा, फिर इसे पाइप में डालें grep। अगर /foo/bar/GREV123 उसके बाद आप क्या कर रहे हैं आप अपने एक्सप्रेशन को सीमित कर सकते हैं grep में केवल आपको वह रिटर्न देने के लिए।
VenomFangs

मैं grep की कोशिश कर सकता हूं, लेकिन एक बार फिर से मेरे पास grep / egrep सोलारिस 10 है, न कि पूरी तरह से चित्रित GNU grep
ldrg

जवाबों:


1
perl -pe 's{^(/foo/bar/(GW|GREV)[^/]*).*?$}{$1}o'

संस्करण:

LINE: while (defined($_ = <ARGV>)) {
    s[^(/foo/bar/(GW|GREV)[^/]*).*?$][$1]o;
}
continue {
   die "-p destination: $!\n" unless print $_;
}

अनुलेख आप मुद्रण प्रविष्टियों को दबाने के लिए कोड जोड़ सकते हैं

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