$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
আউটপুট কেন হয় না 65
? লোভজনকভাবে [0-9]\+
অংশটি মেলানো উচিত নয় ? আমি সেডকে কীভাবে সব মিলিয়ে বলতে পারি 65
?
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5
আউটপুট কেন হয় না 65
? লোভজনকভাবে [0-9]\+
অংশটি মেলানো উচিত নয় ? আমি সেডকে কীভাবে সব মিলিয়ে বলতে পারি 65
?
উত্তর:
.*
প্রথম লোভী - এটা এর ম্যাচিং foo 6
। এটি সেখানে থামার একমাত্র কারণ হ'ল কারণ এর সাথে আর কোনও মিললে পুরো প্যাটার্নটি ম্যাচিং থেকে বিরত রাখতে পারে, তাই এটি এটির জন্য ছেড়ে 5
যায় ([0-9]+)
। ([0-9]*)
পরিবর্তে আপনি যদি এটি তৈরি করেন .*
তবে পুরো লাইনের সাথে এটি মিলবে এবং আপনি আপনার গ্রুপে কিছুই পাবেন না। এর চারপাশের একটি উপায় হ'ল প্রথম অংশটি সংখ্যার সাথে মেলে না tell
$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65