আমি তোমাদের শুধু সঙ্গে এই কাজ করতে পারেন বিশ্বাস grep
, sort
এবং tail
হিসাবে ভাল। এখানে কিছু উদাহরণ স্ট্রিং।
$ echo <str> | grep -oP "\d+" | sort -n | tail -1
<str>
প্রশ্নে আমাদের স্ট্রিং কোথায় ।
উদাহরণ
$ set -o posix; set | grep "str[0-9]"
str0=212334123434test233
str1=212334123434test233abc44
str2=233test212334123434
str3=a212334123434test233abc44
str4=a91234b212334123434abc
এখন যদি আমি আমার grep ...
কমান্ডের মাধ্যমে ঘুরে দেখি ।
$ echo $str0 | grep -oP "\d+" | sort -n | tail -1
212334123434
$ echo $str1 | grep -oP "\d+" | sort -n | tail -1
212334123434
$ echo $str2 | grep -oP "\d+" | sort -n | tail -1
212334123434
$ echo $str3 | grep -oP "\d+" | sort -n | tail -1
212334123434
$ echo $str4 | grep -oP "\d+" | sort -n | tail -1
212334123434
এই পদ্ধতির সমস্ত সাবস্ট্রিংগুলি সংখ্যার ক্রমগুলি বেছে নিয়ে কাজ করে। তারপরে আমরা এই আউটপুটটিকে সংখ্যাগতভাবে বাছাই করব sort -n
এবং তারপরে ব্যবহার করে তালিকার শেষ মানটি ধরব tail -1
। এটি দীর্ঘতম স্ট্রস্ট্রিং হবে।
আপনি tail -1
উদাহরণগুলির মধ্যে একটি পুনরায় চালু করে এটি কীভাবে কাজ করে তা দেখতে পারেন :
$ echo $str4 | grep -oP "\d+" | sort -n
91234
212334123434
জিরো দিয়ে শুরু হওয়া স্ট্রিংগুলি
উপরোক্ত পদ্ধতির প্রতিটা পরিস্থিতিতে আমি একটিকে বাদ দিয়ে কল্পনা করতে পারি for @ স্টারডন এই দৃশ্যের চ্যাটে উল্লেখ করেছেন যা উপরের পদ্ধতির ব্যর্থ করে।
সুতরাং এটি মোকাবেলা করতে আপনার কৌশলগুলি কিছুটা পরিবর্তন করতে হবে। উপরোক্ত পদ্ধতির কার্নেলটি এখনও লাভারেজ করা যায়, তবে ফলাফলগুলিতে আমাদের অক্ষরের সংখ্যাও ইনজেক্ট করা দরকার। এটি স্ট্রিং এবং তার মানগুলিতে অক্ষরের সংখ্যা অনুসারে ফলাফলকে বাছাই করার ক্ষমতা প্রদান করে।
$ for i in $(echo $str0 | grep -oP "\d+");do a=$(echo "$i" | wc -c); \
echo "$a $i"; done | sort -n | tail -1 | cut -d" " -f2
ফলাফল:
$ echo $str0
0000000000001a2test
$ for i in $(echo $str0 | grep -oP "\d+");do a=$(echo "$i" | wc -c); \
echo "$a $i"; done | sort -n | tail -1 | cut -d" " -f2
0000000000001
আপনি ভেরিয়েবলের দৈর্ঘ্য নির্ধারণের জন্য বাশের ক্ষমতাকে কাজে লাগিয়ে কিছুটা ঘনীভূত করতে পারেন ${#var}
।
$ for i in $(echo $str0 | grep -oP "\d+");do echo "${#i} $i"; done | \
sort -n | tail -1 | cut -d" " -f2
0000000000001
P গ্রেপ -পি ব্যবহার করে
আমি grep -P ...
উপরের ব্যবহারটি বেছে নিয়েছি কারণ আমি, পার্ল বিকাশকারী হয়ে, সমস্ত সংখ্যার মতো ক্লাস সিনট্যাক্সের মতো: \d+
পরিবর্তে [[:digit:]]\+
বা এর পরিবর্তে [0-9]\+
। তবে এই বিশেষ সমস্যার জন্য এটি সত্যই প্রয়োজন হয় না। আপনি যেমনটি grep
আমি ব্যবহার করেছি ঠিক তেমন সহজেই তা মুছতে পারে:
$ .... grep -o "[0-9]\+" ....
উদাহরণ স্বরূপ:
$ for i in $(echo $str0 | grep -o "[0-9]\+");do echo "${#i} $i"; done | \
sort -n | tail -1 | cut -d" " -f2
0000000000001