ব্যাশে স্ট্রিং ম্যানিপুলেশন ব্রেকিং ডাউন
শেল স্ক্রিপ্টগুলির সাথে কাজ করার সময়, একটি সাধারণ কাজ হল একটি বিভাজনের উপর ভিত্তি করে একটি স্ট্রিংকে বিভক্ত করা। উদাহরণস্বরূপ, সেমিকোলন দ্বারা পৃথক করা ইমেল ঠিকানা ধারণকারী একটি স্ট্রিং বিবেচনা করুন। আপনি যদি প্রতিটি ইমেল পৃথকভাবে প্রক্রিয়া করতে চান, তাহলে এই স্ট্রিংটি কীভাবে বিভক্ত করা যায় তা বোঝা অপরিহার্য হয়ে ওঠে। এই নিবন্ধটি ব্যাশে এটি অর্জন করার জন্য বিভিন্ন পদ্ধতির মাধ্যমে আপনাকে গাইড করবে।
আমরা সমাধানগুলি অন্বেষণ করব যেমন `tr` কমান্ড ব্যবহার করা এবং অভ্যন্তরীণ ক্ষেত্র বিভাজক (IFS) ম্যানিপুলেট করা। শেষ পর্যন্ত, আপনি দক্ষতার সাথে স্ট্রিং বিভাজন পরিচালনা করতে এবং IFS কে এর ডিফল্ট মানতে পুনরায় সেট করতে সক্ষম হবেন। চলুন ডুব দেওয়া যাক এবং আপনার ব্যাশ স্ক্রিপ্টিং কাজগুলিকে সহজ করুন!
| আদেশ | বর্ণনা |
|---|---|
| tr | অক্ষর অনুবাদ বা মুছে দেয়। স্ট্রিং বিভক্ত করার জন্য একটি নতুন লাইন অক্ষর দিয়ে সেমিকোলন প্রতিস্থাপন করতে এখানে ব্যবহৃত হয়। |
| IFS | অভ্যন্তরীণ ক্ষেত্র বিভাজক, ব্যাশ স্ক্রিপ্টে একটি নির্দিষ্ট ডিলিমিটারের উপর ভিত্তি করে স্ট্রিংগুলিকে বিভক্ত করতে ব্যবহৃত হয়। |
| read -r -a | ইনপুটের একটি লাইন পড়ে এবং এটিকে একটি অ্যারেতে বিভক্ত করে। -r বিকল্পটি ব্যাকস্ল্যাশগুলিকে পালানোর অক্ষর হিসাবে ব্যাখ্যা করা থেকে বাধা দেয়। |
| echo | স্ট্যান্ডার্ড আউটপুটে পাঠ্য প্রিন্ট করে। বিভক্ত স্ট্রিং উপাদান প্রদর্শন করতে ব্যবহৃত. |
| split | একটি পার্ল ফাংশন যা একটি স্ট্রিংকে একটি নির্দিষ্ট ডিলিমিটারের উপর ভিত্তি করে স্ট্রিংগুলির একটি তালিকায় ভাগ করে। |
| foreach | একটি পার্ল লুপ কাঠামো যা মানগুলির একটি তালিকার উপর পুনরাবৃত্তি করে। |
ব্যাশ স্ট্রিং স্প্লিটিং কৌশল বোঝা
প্রথম ব্যাশ স্ক্রিপ্টটি দেখায় কিভাবে একটি স্ট্রিং ব্যবহার করে বিভক্ত করা যায় tr আদেশ এখানে, আমরা একটি স্ট্রিং সংজ্ঞায়িত করি IN="bla@some.com;john@home.com" আর ব্যবহার করুন echo সাথে tr সেমিকোলন ডিলিমিটারকে একটি নতুন লাইন অক্ষরে অনুবাদ করতে। এটি কার্যকরভাবে স্ট্রিংটিকে পৃথক লাইনে ভেঙে দেয়। দ্য for loop তারপর প্রতিটি লাইনের উপর পুনরাবৃত্তি করে, বর্গাকার বন্ধনীর মধ্যে ঠিকানাগুলি মুদ্রণ করে। এই পদ্ধতিটি সহজবোধ্য এবং স্ট্রিং ম্যানিপুলেট করার জন্য ইউনিক্স কমান্ডের শক্তিশালী টেক্সট প্রসেসিং ক্ষমতার ব্যবহার করে।
আরেকটি পদ্ধতি সমন্বয় জড়িত Internal Field Separator (IFS). সাময়িকভাবে সেট করে IFS একটি সেমিকোলনে, আমরা স্ট্রিংটিকে একটি অ্যারেতে বিভক্ত করতে পারি। আমরা মূল সংরক্ষণ IFS প্রতি OIFS এটি পরিবর্তন করার আগে, আমরা পরে এটি পুনরুদ্ধার করতে পারি তা নিশ্চিত করে৷ দ্য read -r -a কমান্ড একটি অ্যারের মধ্যে ইনপুট স্ট্রিং পড়ে mails2, পরিবর্তিত উপর ভিত্তি করে বিভক্ত করা IFS. প্রক্রিয়াকরণের পর, আসল IFS পুনরুদ্ধার করা হয়। এই পদ্ধতিটি ব্যাশে স্ট্রিং বিভাজন পরিচালনা করার জন্য আরও প্রোগ্রামেটিক উপায় প্রদান করে, যা আমাদের আরও ম্যানিপুলেশনের জন্য অ্যারে ব্যবহার করতে দেয়।
একটি ডিলিমিটারে স্ট্রিংগুলিকে বিভক্ত করতে ব্যাশ ব্যবহার করা
ব্যাশ স্ক্রিপ্ট
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Split string using 'tr' and iteratemails=$(echo $IN | tr ";" "\n")for addr in $mails; doecho "> [$addr]"done# Output:# > [bla@some.com]# > [john@home.com]
IFS ব্যবহার করে ব্যাশে একটি স্ট্রিং বিভক্ত করা
ব্যাশ স্ক্রিপ্ট
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Save the original IFSOIFS=$IFS# Set IFS to semicolonIFS=';'# Split string into an arrayread -r -a mails2 <<< "$IN"# Restore the original IFSIFS=$OIFS# Iterate over the arrayfor x in "${mails2[@]}"; doecho "> [$x]"done# Output:# > [bla@some.com]# > [john@home.com]
স্ট্রিং স্প্লিটিংয়ের জন্য পাইথন ব্যবহার করা
পাইথন স্ক্রিপ্ট
#!/usr/bin/env python3# Input stringIN = "bla@some.com;john@home.com"# Split string by semicolonmails = IN.split(';')# Iterate and print each elementfor addr in mails:print(f"> [{addr}]")# Output:# > [bla@some.com]# > [john@home.com]
একটি স্ট্রিং বিভক্ত করতে পার্ল ব্যবহার করা
পার্ল স্ক্রিপ্ট
#!/usr/bin/env perluse strict;use warnings;# Input stringmy $IN = "bla@some.com;john@home.com";# Split string by semicolonmy @mails = split(';', $IN);# Iterate and print each elementforeach my $addr (@mails) {print "> [$addr]\n";}# Output:# > [bla@some.com]# > [john@home.com]
ব্যাশে উন্নত স্ট্রিং স্প্লিটিং কৌশল
ব্যাশে স্ট্রিং বিভক্ত করার আরেকটি শক্তিশালী পদ্ধতি হল ব্যবহার করা awk আদেশ awk প্যাটার্ন স্ক্যানিং এবং প্রক্রিয়াকরণের জন্য ডিজাইন করা একটি বহুমুখী কমান্ড-লাইন ইউটিলিটি। এটি স্ট্রিং বিভক্ত করার জন্য বিশেষভাবে কার্যকর হতে পারে কারণ এটি আমাদের কাস্টম ফিল্ড বিভাজক সংজ্ঞায়িত করতে দেয়। উদাহরণস্বরূপ, আমরা ব্যবহার করতে পারেন awk -F";" '{print $1, $2}' সেমিকোলন ডিলিমিটারের উপর ভিত্তি করে একটি স্ট্রিং বিভক্ত করতে এবং পৃথক উপাদানগুলি মুদ্রণ করতে। এই পদ্ধতিটি অত্যন্ত নমনীয় এবং এটি আরও জটিল স্ট্রিং ম্যানিপুলেশন কাজগুলি পরিচালনা করতে পারে, এটি একটি ব্যাশ প্রোগ্রামারের টুলকিটে একটি মূল্যবান টুল তৈরি করে।
উপরন্তু, দ cut ডিলিমিটারের উপর ভিত্তি করে স্ট্রিংগুলিকে বিভক্ত করতে কমান্ড ব্যবহার করা যেতে পারে। দ্য cut কমান্ডটি সাধারণত ইনপুট ডেটার প্রতিটি লাইন থেকে বিভাগগুলি বের করার জন্য ব্যবহৃত হয়। সঙ্গে একটি সীমানা নির্দিষ্ট করে -d বিকল্প এবং সঙ্গে ক্ষেত্র নির্বাচন -f বিকল্প, আমরা দক্ষতার সাথে বিভক্ত এবং একটি স্ট্রিং অংশ নিষ্কাশন করতে পারেন. উদাহরণস্বরূপ, ব্যবহার করে echo $IN | cut -d';' -f1 ইনপুট স্ট্রিং থেকে প্রথম ইমেল ঠিকানা বের করবে। এই উন্নত পদ্ধতিগুলি ব্যাশে স্ট্রিং ম্যানিপুলেশন কাজগুলির জন্য আরও নিয়ন্ত্রণ এবং নির্ভুলতা প্রদান করে।
ব্যাশে স্ট্রিং স্প্লিটিং সম্পর্কে সাধারণ প্রশ্ন এবং উত্তর
- আমি কিভাবে Bash এ একটি সীমারেখার উপর একটি স্ট্রিং বিভক্ত করব?
- আপনি ব্যবহার করতে পারেন IFS পরিবর্তনশীল বা কমান্ড মত tr, awk, এবং cut একটি বিভেদক উপর স্ট্রিং বিভক্ত.
- কি IFS বাশে পরিবর্তনশীল?
- দ্য IFS (অভ্যন্তরীণ ক্ষেত্র বিভাজক) একটি বিশেষ পরিবর্তনশীল যা ইনপুট পাঠ্যকে শব্দ বা টোকেনে বিভক্ত করতে ব্যবহৃত অক্ষর(গুলি) সংজ্ঞায়িত করে।
- আমি কিভাবে রিসেট করতে পারি IFS তার ডিফল্ট মান পরিবর্তনশীল?
- আসলটি সংরক্ষণ করুন IFS এটি পরিবর্তন করার আগে মান, এবং প্রক্রিয়াকরণের পরে এটি পুনরুদ্ধার করুন: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- কি করে tr স্ট্রিং স্প্লিটিং এ কমান্ড করবেন?
- দ্য tr কমান্ড অক্ষর অনুবাদ বা মুছে দেয়। এটি একটি স্ট্রিংকে বিভক্ত করতে নতুন লাইন দিয়ে বিভেদক প্রতিস্থাপন করতে পারে: echo $IN | tr ";" "\n".
- আমি ব্যাশ ব্যবহার করে একটি অ্যারের মধ্যে একটি স্ট্রিং বিভক্ত করতে পারি?
- হ্যাঁ, পরিবর্তন করে IFS পরিবর্তনশীল এবং ব্যবহার read -r -a, আপনি একটি অ্যারেতে একটি স্ট্রিং বিভক্ত করতে পারেন: read -r -a array <<< "$string".
- কি awk কমান্ড জন্য ব্যবহৃত?
- awk প্যাটার্ন স্ক্যানিং এবং প্রক্রিয়াকরণের জন্য একটি কমান্ড-লাইন ইউটিলিটি। এটি কাস্টম ক্ষেত্র বিভাজক সংজ্ঞায়িত করে স্ট্রিং বিভক্ত করতে পারে।
- কিকরে cut আদেশ কাজ?
- দ্য cut কমান্ড ইনপুটের প্রতিটি লাইন থেকে বিভাগগুলি বের করে। এটি একটি বিভেদক নির্দিষ্ট করে এবং ক্ষেত্র নির্বাচন করে স্ট্রিংগুলিকে বিভক্ত করতে পারে: echo $string | cut -d';' -f1.
- কেন ব্যবহার করা হচ্ছে IFS স্ট্রিং বিভাজন সহায়ক?
- ব্যবহার IFS আপনাকে বিভিন্ন ইনপুট বিন্যাসের জন্য বহুমুখী করে স্ট্রিং বিভক্ত করার জন্য কাস্টম সীমানা নির্ধারণ করতে দেয়।
- ব্যাশে একাধিক বিভাজনকারী দ্বারা একটি স্ট্রিং বিভক্ত করা কি সম্ভব?
- হ্যাঁ, আপনি একটি সমন্বয় ব্যবহার করতে পারেন tr এবং awk একাধিক ডিলিমিটার পরিচালনা করতে।
- আমি ব্যবহার করতে পারেন sed ব্যাশে স্ট্রিং বিভাজনের জন্য?
- যখন sed এটি প্রাথমিকভাবে একটি স্ট্রিম সম্পাদক, এটি অন্যান্য কমান্ডের সাথে একত্রিত করা যেতে পারে awk পরোক্ষভাবে স্ট্রিং বিভক্ত করা
বাশ-এ স্ট্রিং স্প্লিটিং-এর চূড়ান্ত চিন্তাভাবনা
ব্যাশে স্ট্রিং ম্যানিপুলেশন আয়ত্ত করা আপনার স্ক্রিপ্টিং দক্ষতা উল্লেখযোগ্যভাবে উন্নত করতে পারে। ব্যবহার করছেন কিনা IFS সাধারণ ডিলিমিটার বা আরও উন্নত সরঞ্জামগুলির জন্য tr এবং awk, এই কৌশলগুলি কার্যকর ব্যাশ প্রোগ্রামিংয়ের জন্য অপরিহার্য। সর্বদা আসলটি পুনরুদ্ধার করতে ভুলবেন না IFS আপনার স্ক্রিপ্টে অপ্রত্যাশিত আচরণ এড়াতে। এই পদ্ধতিগুলির সাহায্যে, আপনি আপনার ব্যাশ স্ক্রিপ্টগুলিতে বিস্তৃত স্ট্রিং প্রক্রিয়াকরণ কাজগুলি পরিচালনা করতে পারেন।