इस साधारण मामले में लालच क्यों नहीं है?


11
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5

आउटपुट क्यों नहीं है 65? लालच नहीं करना चाहिए [0-9]\+भाग लालच मैच ? मैं सभी को मैच करने के लिए sed कैसे बताऊं 65?

जवाबों:


13

सबसे .*पहले लालची है - यह मेल खाता है foo 6। इसका एकमात्र कारण यह है कि वहाँ है क्योंकि किसी भी आगे मिलान पूरे पैटर्न को रोकने से मेल खाता है, इसलिए यह के 5लिए छोड़ देता है ([0-9]+)। यदि आप इसे बनाया ([0-9]*)बजाय .*पूरे लाइन से मेल खाएगा और आप अपने समूह में कुछ भी नहीं मिल चाहते हैं। इसका एक तरीका यह है कि पहला भाग संख्याओं से मेल न खाए:

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.