$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
आउटपुट क्यों नहीं है 65
? लालच नहीं करना चाहिए [0-9]\+
भाग लालच मैच ? मैं सभी को मैच करने के लिए sed कैसे बताऊं 65
?
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
आउटपुट क्यों नहीं है 65
? लालच नहीं करना चाहिए [0-9]\+
भाग लालच मैच ? मैं सभी को मैच करने के लिए sed कैसे बताऊं 65
?
जवाबों:
सबसे .*
पहले लालची है - यह मेल खाता है foo 6
। इसका एकमात्र कारण यह है कि वहाँ है क्योंकि किसी भी आगे मिलान पूरे पैटर्न को रोकने से मेल खाता है, इसलिए यह के 5
लिए छोड़ देता है ([0-9]+)
। यदि आप इसे बनाया ([0-9]*)
बजाय .*
पूरे लाइन से मेल खाएगा और आप अपने समूह में कुछ भी नहीं मिल चाहते हैं। इसका एक तरीका यह है कि पहला भाग संख्याओं से मेल न खाए:
$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65