কেন এই সহজ ক্ষেত্রে লোভী না?


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

আউটপুট কেন হয় না 65? লোভজনকভাবে [0-9]\+অংশটি মেলানো উচিত নয় ? আমি সেডকে কীভাবে সব মিলিয়ে বলতে পারি 65?

উত্তর:


13

.*প্রথম লোভী - এটা এর ম্যাচিং foo 6। এটি সেখানে থামার একমাত্র কারণ হ'ল কারণ এর সাথে আর কোনও মিললে পুরো প্যাটার্নটি ম্যাচিং থেকে বিরত রাখতে পারে, তাই এটি এটির জন্য ছেড়ে 5যায় ([0-9]+)([0-9]*)পরিবর্তে আপনি যদি এটি তৈরি করেন .*তবে পুরো লাইনের সাথে এটি মিলবে এবং আপনি আপনার গ্রুপে কিছুই পাবেন না। এর চারপাশের একটি উপায় হ'ল প্রথম অংশটি সংখ্যার সাথে মেলে না tell

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.