কম্পিউটার টিউটোরিয়াল

ব্যাশ স্ট্রিং ম্যানিপুলেশন মাস্টার করুন: লেন্থ, সাবস্ট্রিং, ফাইন্ড এন্ড রিপ্লেস টেকনিক

ব্যাশ শেলে, যখন আপনি একটি ডলার সাইন এবং ভেরিয়েবল নাম ব্যবহার করেন, শেল ভেরিয়েবলটিকে এর মান দিয়ে এক্সপ্যান্ড করে। শেলের এই ফিচারকে প্যারামিটার এক্সপ্যানশন বলা হয়।

কিন্তু প্যারামিটার এক্সপ্যানশনের Weitere zahlreiche'autres формы আছে যা আপনাকে একটি প্যারামিটার এক্সপ্যান্ড করতে এবং এক্সপ্যানশন প্রসেসে মান মডিফাই বা অন্যান্য মান সাবস্টিটিউট করতে দেয়। এই আর্টিকেলে, আমরা প্যারামিটার এক্সপ্যানশন কনসেপ্টটি স্ট্রিং ম্যানিপুলেশন অপারেশনের জন্য কীভাবে ব্যবহার করতে হয় তা রিভিউ করব।

এই আর্টিকেল আমাদের চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ। ব্যাশ { } এক্সপ্যানশন সম্পর্কে আমাদের পূর্বের আর্টিকেলটি রেফার করুন।

১. ব্যাশ শেল স্ক্রিপ্টের ভিতরে স্ট্রিং লেন্থ চিহ্নিত করা

${#string}

উপরোক্ত ফরম্যাটটি দিয়ে দिये गये ব্যাশ ভেরিয়েবলের লেন্থ পাওয়া যায়।

$ cat len.sh #! /bin/bash var="Welcome to the geekstuff" echo ${#var} $ ./len.sh 24 

ব্যাশ ভেরিয়েবল সম্পর্কে আরও জানতে পড়ুন "6 Practical Bash Global and Local Variable Examples"।

২. ব্যাশ শেল স্ক্রিপ্টের ভিতরে একটি ভেরিয়েবল থেকে সাবস্ট্রিং এক্সট্রাক্ট করা

ব্যাশ একটি স্ট্রিং থেকে সাবস্ট্রিং এক্সট্রাক্ট করার উপায় দেয়। নিচের উদাহরণটি ব্যাখ্যা করে কীভাবে একটি নির্দিষ্ট পজিশন থেকে n ক্যারেক্টার পার্স করতে হয়।

${string:position}

$string-এ $position থেকে সাবস্ট্রিং এক্সট্রাক্ট করুন

${string:position:length}

$string-এ $position থেকে শুরু করে $length ক্যারেক্টার সাবস্ট্রিং এক্সট্রাক্ট করুন। নিচের উদাহরণে, প্রথম echo স্টেটমেন্ট ১৫তম পজিশন থেকে সাবস্ট্রিং রিটার্ন করে। দ্বিতীয় echo স্টেটমেন্ট ১৫তম পজিশন থেকে ৪ ক্যারেক্টার রিটার্ন করে। লেন্থ শূন্য বা তার চেয়ে বড় সংখ্যা হতে হবে।

$ cat substr.sh #! /bin/bash var="Welcome to the geekstuff" echo ${var:15} echo ${var:15:4} $ ./substr.sh geekstuff geek 

এছাড়া, $*, $@, $#, $$, $!, $?, $-, $_ ব্যাশ স্পেশাল প্যারামিটার বুঝতে আমাদের পূর্বের আর্টিকেলটি দেখুন।

৩. শর্টেস্ট সাবস্ট্রিং ম্যাচ

নিচের সিন্ট্যাক্স $string-এর সামনের থেকে $substring-এর শর্টেস্ট ম্যাচ ডিলিট করে

${string#substring}

নিচের সিন্ট্যাক্স $string-এর পেছনের থেকে $substring-এর শর্টেস্ট ম্যাচ ডিলিট করে

${string%substring}

নিচের স্যাম্পল শেল স্ক্রিপ্ট উপরের দুটি শর্টেস্ট সাবস্ট্রিং ম্যাচ কনসেপ্ট ব্যাখ্যা করে।

$ cat shortest.sh #! /bin/bash filename="bash.string.txt" echo ${filename#*.} echo ${filename%.*} $ ./shortest.sh After deletion of shortest match from front: string.txt After deletion of shortest match from back: bash.string 

প্রথম echo স্টেটমেন্টে সাবস্ট্রিং '*.' ক্যারেক্টার এবং একটি ডট ম্যাচ করে, এবং # স্ট্রিং-এর সামন থেকে স্ট্রিপ করে, তাই এটি "bash." সাবস্ট্রিংটি filename ভেরিয়েবল থেকে স্ট্রিপ করে। দ্বিতীয় echo স্টেটমেন্টে সাবস্ট্রিং '.*' ডট দিয়ে শুরু হওয়া সাবস্ট্রিং ম্যাচ করে, এবং % স্ট্রিং-এর পেছন থেকে স্ট্রিপ করে, তাই এটি '.txt' সাবস্ট্রিংটি ডিলিট করে।

৪. লংগেস্ট সাবস্ট্রিং ম্যাচ

নিচের সিন্ট্যাক্স $string-এর সামনের থেকে $substring-এর লংগেস্ট ম্যাচ ডিলিট করে

${string##substring}

নিচের সিন্ট্যাক্স $string-এর পেছনের থেকে $substring-এর লংগেস্ট ম্যাচ ডিলিট করে

${string%%substring}

নিচের স্যাম্পল শেল স্ক্রিপ্ট উপরের দুটি লংগেস্ট সাবস্ট্রিং ম্যাচ কনসেপ্ট ব্যাখ্যা করে।

$ cat longest.sh #! /bin/bash filename="bash.string.txt" echo "After deletion of longest match from front:" ${filename##*.} echo "After deletion of longest match from back:" ${filename%%.*} $ ./longest.sh After deletion of longest match from front: txt After deletion of longest match from back: bash 

উপরোক্ত উদাহরণে, ##*. '*.'-এর জন্য লংগেস্ট ম্যাচ স্ট্রিপ করে যা "bash.string." ম্যাচ করে, তাই স্ট্রিপ করার পর বাকি txt প্রিন্ট হয়। এবং %%.* পেছন থেকে .*-এর লংগেস্ট ম্যাচ স্ট্রিপ করে যা ".string.txt" ম্যাচ করে, স্ট্রিপ করার পর "bash" রিটার্ন করে।

৫. ব্যাশ শেল স্ক্রিপ্টের ভিতরে স্ট্রিং মান ফাইন্ড এন্ড রিপ্লেস করা

শুধু প্রথম ম্যাচ রিপ্লেস করুন

${string/pattern/replacement}

এটি $string ভেরিয়েবলে প্যাটার্ন ম্যাচ করে, এবং প্যাটার্নের শুধু প্রথম ম্যাচটিকে রিপ্লেসমেন্ট দিয়ে রিপ্লেস করে।

$ cat firstmatch.sh #! /bin/bash filename="bash.string.txt" echo "After Replacement:" ${filename/str*./operations.} $ ./firstmatch.sh After Replacement: bash.operations.txt 

সকল ম্যাচ রিপ্লেস করুন

${string//pattern/replacement}

এটি প্যাটার্নের সকল ম্যাচকে রিপ্লেসমেন্ট দিয়ে রিপ্লেস করে।

$ cat allmatch.sh #! /bin/bash filename="Path of the bash is /bin/bash" echo "After Replacement:" ${filename//bash/sh} $ ./allmatch.sh After Replacement: Path of the sh is /bin/sh 

ফাইন্ড এন্ড রিপ্লেস সম্পর্কে কথা বললে, আমাদের পূর্বের আর্টিকেলগুলো দেখুন - sed substitute examples এবং Vim find and replace।

শুরু এবং শেষে রিপ্লেস করুন

${string/#pattern/replacement}

নিচের সিন্ট্যাক্স রিপ্লেসমেন্ট স্ট্রিং দিয়ে রিপ্লেস করে, শুধু তখনই যখন প্যাটার্ন $string-এর শুরুতে ম্যাচ করে।

${string/%pattern/replacement}

নিচের সিন্ট্যাক্স রিপ্লেসমেন্ট স্ট্রিং দিয়ে রিপ্লেস করে, শুধু তখনই যখন প্যাটার্ন দেওয়া $string-এর শেষে ম্যাচ করে।

$ cat posmatch.sh #! /bin/bash filename="/root/admin/monitoring/process.sh" echo "Replaced at the beginning:" ${filename/#\/root/\/tmp} echo "Replaced at the end": ${filename/%.*/.ksh} $ ./posmatch.sh Replaced at the beginning: /tmp/admin/monitoring/process.sh Replaced at the end: /root/admin/monitoring/process.ksh 

পরামর্শিত পড়াশোনা

ব্যাশ স্ট্রিং ম্যানিপুলেশন মাস্টার করুন: লেন্থ, সাবস্ট্রিং, ফাইন্ড এন্ড রিপ্লেস টেকনিকBash 101 Hacks, by Ramesh Natarajan। আমার অধিকাংশ সময় লিনাক্স এনভায়রনমেন্টে কাটে। তাই স্বাভাবিকভাবেই আমি ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের большой ফ্যান। ১৫ বছর আগে, যখন আমি *nix-এর বিভিন্ন ফ্লেভরে কাজ করতাম, তখন সি শেল এবং কোর্ণ শেলে অনেক কোড লিখতাম। পরে, যখন লিনাক্সে সিস্টেম অ্যাডমিনিস্ট্রেটর হিসেবে কাজ শুরু করলাম, প্রায় সব টাস্ক ব্যাশ শেল স্ক্রিপ্টিং দিয়ে অটোমেট করলাম। আমার ব্যাশ অভিজ্ঞতার ভিত্তিতে, আমি Bash 101 Hacks ইবুক লিখেছি যাতে ১০১টি প্র্যাক্টিক্যাল উদাহরণ আছে ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং-এ। যদি আপনি ব্যাশ মাস্টার করার কথা ভাবছেন, তো নিজের উপকারে এই বইটি পড়ুন, যা আপনাকে আপনার ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং নিয়ন্ত্রণে সাহায্য করবে।


  1. Microsoft Publisher-এ Find and Replace ব্যবহার কীভাবে করবেন

  2. পাইথনে স্ট্রিংর দৈর্ঘ্য বের করা (৩টি উপায়)

  3. Notepad++-এ স্ট্রিং/ক্যারেক্টার/সিম্বল খুঁজে নতুন লাইনে রিপ্লেস করা

  4. ব্যাশ ভেরিয়েবল মাস্টার করুন: গ্লোবাল ও লোকাল ব্যবহারের ৬টি প্র্যাক্টিক্যাল উদাহরণ