regex grep में अपेक्षित रूप से काम नहीं कर रहा है


0

मेरी समस्या एक रेगेक्स के बारे में है। इसके लिए धन्यवाद regexr, मैं एक अभिव्यक्ति लिखने में कामयाब रहा, जो इंटरफ़ेस नाम से मेल खाता है routeकमांड ने मुझे दिया।

लेकिन मैं इसे नहीं पकड़ सकता:

route | grep -Eo "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

ऐसा क्यों है?


तत्काल मुद्दा जो मैं देख रहा हूं वह यह है कि आप regexrरेगेक्स के साथ लिपटे हुए हैं /(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$/igm। और जब आप grepइसका उपयोग कर रहे हैं तो बस (?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$। चूँकि आप एक बहु की इच्छा रखते हैं grepजो अभी अस्तित्व में नहीं है; grepएक समय में सख्ती से एक लाइन है।
जाकगोल्ड

विभिन्न रेगेक्स बोलियों का एक समूह है। grep -Eऔर जावास्क्रिप्ट ( regexrएक त्वरित नज़र से) सटीक एक ही का उपयोग नहीं करते हैं, इसलिए आप केवल शुरुआती बिंदु के रूप में रेगेक्सर आउटपुट का उपयोग कर सकते हैं।
jjlin

जवाबों:


2

विभिन्न कार्यक्रम (और उक्त कार्यक्रम के विभिन्न संस्करण) अलग-अलग रेगेक्स कार्यान्वयन का उपयोग कर सकते हैं। यह जानने के लिए कि कौन सी सुविधा समर्थित है / समर्थित नहीं है, यह जानने के लिए अपने regex भाग को कम या तोड़कर देखें।

उदाहरण के लिए, मुझे गैर-कैप्चरिंग ग्रुप स्पेसियर ?:को आपके उदाहरण से हटाने की आवश्यकता है ताकि मेरा जीएनयू ग्रीप सोलर 11 में अपेक्षित रूप से चल सके।

या आप पर्ल रेगेक्स इंजन का उपयोग करने के -Eसाथ बदलने की कोशिश कर सकते हैं , जो मेरे मामले में, मेरे जीएनयू grep को और अधिक संशोधनों के बिना अपने रेगेक्स को चलाने में सक्षम बनाते हैं।-P

route | grep -Po "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

नोट: सोलारिस 11 में GNU grep स्थित है/usr/gnu/bin/grep

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