$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