ভূমিকা:
ব্যাশে ফাইলগুলির সাথে কাজ করার সময়, আপনাকে প্রায়শই ফাইলের নামটি এর এক্সটেনশন থেকে আলাদা করতে হতে পারে। একটি সাধারণ পদ্ধতি `cut` কমান্ড ব্যবহার করে, কিন্তু এই পদ্ধতিটি একাধিক পিরিয়ড ধারণ করে এমন ফাইলের নাম দিয়ে ব্যর্থ হতে পারে।
উদাহরণস্বরূপ, `a.b.js` এর মতো একটি ফাইলের নাম ভুলভাবে `a.b` এবং `js`-এর পরিবর্তে `a` এবং `b.js`-এ বিভক্ত হবে। যদিও পাইথন `os.path.splitext()` এর সাথে একটি সহজ সমাধান প্রদান করে, পাইথন ব্যবহার করা সবসময় সবচেয়ে কার্যকর বিকল্প নাও হতে পারে। এই নিবন্ধটি ব্যাশে এই কাজটি অর্জনের জন্য আরও ভাল পদ্ধতিগুলি অন্বেষণ করে।
আদেশ | বর্ণনা |
---|---|
${variable%.*} | ফাইলের নাম থেকে এক্সটেনশন মুছে ফেলার জন্য প্যারামিটার সম্প্রসারণ। |
${variable##*.} | ফাইলের নাম থেকে এক্সটেনশন বের করতে পরামিতি সম্প্রসারণ। |
awk -F. | ফিল্ড বিভাজককে একটি পিরিয়ডে সেট করে, ফাইলের নাম বিভক্ত করতে ব্যবহৃত হয়। |
OFS="." | awk-তে আউটপুট ফিল্ড বিভাজক, এক্সটেনশন ছাড়াই ফাইলের নাম পুনর্গঠন করতে ব্যবহৃত হয়। |
NF-- | কার্যকরভাবে এক্সটেনশনটি সরিয়ে, awk-এ একটি করে ক্ষেত্রের সংখ্যা হ্রাস করে। |
${BASH_REMATCH} | ব্যাশের একটি রেগুলার এক্সপ্রেশন থেকে মিল ধারণ করে এমন অ্যারে। |
local variable | ব্যাশে একটি ফাংশনের মধ্যে স্থানীয় সুযোগ সহ একটি পরিবর্তনশীল ঘোষণা করে। |
ব্যাশ সমাধানের বিস্তারিত ব্রেকডাউন
প্রদত্ত স্ক্রিপ্টগুলি বাশে ফাইলের নাম এবং এর এক্সটেনশন আলাদা করার জন্য বিভিন্ন পদ্ধতি অফার করে। প্রথম স্ক্রিপ্ট ব্যাশ প্যারামিটার সম্প্রসারণ ব্যবহার করে। পরিবর্তনশীল ${FILE%.*} শেষ পিরিয়ড থেকে স্ট্রিং এর শেষ পর্যন্ত সবকিছু স্ট্রিপ করে এক্সটেনশনটি সরিয়ে দেয়, যখন ${FILE##*.} শেষ সময়ের পরে সবকিছু গ্রহণ করে এক্সটেনশন ক্যাপচার করে। এই পদ্ধতিটি বেশিরভাগ ফাইলের নাম কাঠামোর জন্য সহজবোধ্য এবং দক্ষ। দ্বিতীয় স্ক্রিপ্ট ব্যবহার awk, ইউনিক্স-এর মতো পরিবেশে একটি শক্তিশালী টেক্সট-প্রসেসিং টুল। ফিল্ড সেপারেটরকে একটি পিরিয়ড ব্যবহার করে সেট করে -F., এটি ফাইলের নামকে অংশে বিভক্ত করার অনুমতি দেয়। আউটপুট ক্ষেত্র বিভাজক, OFS=".", এবং সঙ্গে ক্ষেত্রের সংখ্যা হ্রাস NF-- এটি এক্সটেনশন ছাড়াই ফাইলের নাম পুনরায় একত্রিত করার কৌশল।
তৃতীয় স্ক্রিপ্ট ব্যাশ-এ রেগুলার এক্সপ্রেশন ব্যবহার করে, লিভারেজ করে ${BASH_REMATCH} একটি রেজেক্স ম্যাচে গ্রুপ ক্যাপচার করতে। এই স্ক্রিপ্টটি একটি প্যাটার্ন ব্যবহার করে যা ফাইলের নামটিকে দুটি গ্রুপে বিভক্ত করে: একটি বেস নামের জন্য এবং একটি এক্সটেনশনের জন্য। অবশেষে, কাস্টম ফাংশন স্ক্রিপ্ট একটি ফাংশনের মধ্যে প্যারামিটার সম্প্রসারণ যুক্তিকে এনক্যাপসুলেট করে, কোড পুনঃব্যবহারযোগ্যতা এবং পঠনযোগ্যতা বাড়ায়। এটি ব্যবহার করে local variable বৃহত্তর স্ক্রিপ্টে অনিচ্ছাকৃত পার্শ্বপ্রতিক্রিয়া প্রতিরোধ করে ভেরিয়েবলগুলিকে ফাংশনের মধ্যে ব্যাপ্ত রাখার ঘোষণা। প্রতিটি পদ্ধতি একই সমস্যা সমাধানের জন্য একটি ভিন্ন পদ্ধতি প্রদর্শন করে, ব্যাশ স্ক্রিপ্টিংয়ের বহুমুখিতা এবং ক্ষমতা প্রদর্শন করে।
ব্যাশে প্যারামিটার সম্প্রসারণ ব্যবহার করা
ব্যাশ স্ক্রিপ্টিং
#!/bin/bash
# Script to extract filename and extension using parameter expansion
FILE="a.b.js"
FILENAME="${FILE%.*}"
EXTENSION="${FILE##*.}"
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
ফাইলের নাম এবং এক্সটেনশন আলাদা করতে Awk ব্যবহার করা
Awk এর সাথে বাশ
#!/bin/bash
# Script to extract filename and extension using awk
FILE="a.b.js"
FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')
EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
ব্যাশে রেগুলার এক্সপ্রেশন ব্যবহার করা
রেজেক্স সহ ব্যাশ স্ক্রিপ্টিং
#!/bin/bash
# Script to extract filename and extension using regex
FILE="a.b.js"
[[ "$FILE" =~ (.*)\.(.*) ]]
FILENAME=${BASH_REMATCH[1]}
EXTENSION=${BASH_REMATCH[2]}
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
ব্যাশে একটি কাস্টম ফাংশন ব্যবহার করা
কাস্টম ফাংশন সহ ব্যাশ স্ক্রিপ্টিং
#!/bin/bash
# Function to extract filename and extension
extract_filename_extension() {
local file="$1"
echo "Filename: ${file%.*}"
echo "Extension: ${file##*.}"
}
# Call the function with a file
extract_filename_extension "a.b.js"
ব্যাশে ফাইল ম্যানিপুলেশনের জন্য বিকল্প পদ্ধতি অন্বেষণ করা হচ্ছে
ইতিমধ্যে আলোচনা করা পদ্ধতির বাইরে, ফাইলের নাম এবং এক্সটেনশনগুলি ম্যানিপুলেট করার জন্য ব্যাশে অন্যান্য দরকারী কৌশল রয়েছে। যেমন একটি পদ্ধতি ব্যবহার জড়িত basename এবং dirname আদেশ basename একটি পথ থেকে ফাইলের নাম বের করতে ব্যবহার করা যেতে পারে, যখন dirname ডিরেক্টরি পাথ পুনরুদ্ধার করে। প্যারামিটার সম্প্রসারণের সাথে এই কমান্ডগুলিকে একত্রিত করা কার্যকরভাবে ফাইলের নাম এবং এক্সটেনশানগুলিকে আলাদা করতে পারে। উদাহরণস্বরূপ, ব্যবহার করে basename "$FILE" ".${FILE##*.}" ফাইলের নাম থেকে এক্সটেনশন সরিয়ে দেয়। শুধুমাত্র ফাইলের নাম না দিয়ে সম্পূর্ণ ফাইল পাথের সাথে কাজ করার সময় এই পদ্ধতিটি বিশেষভাবে কার্যকর।
আরেকটি পদ্ধতি ব্যবহার জড়িত sed, ফিল্টারিং এবং টেক্সট রূপান্তর করার জন্য একটি শক্তিশালী স্ট্রিম সম্পাদক। উপযুক্ত রেগুলার এক্সপ্রেশন তৈরি করে, sed ফাইলের নাম এবং এক্সটেনশন আলাদা করতে পারে। উদাহরণস্বরূপ, কমান্ড echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' ফাইলের নাম এবং এক্সটেনশনকে বিভক্ত করে, আলাদা ক্যাপচার গ্রুপে রেখে। এই কৌশলটি নমনীয় এবং জটিল ফাইলের নাম কাঠামো পরিচালনা করতে পারে। এই অতিরিক্ত সরঞ্জাম এবং পদ্ধতিগুলি অন্বেষণ করা ব্যাশে ফাইল ডেটা ম্যানিপুলেট করার আপনার ক্ষমতাকে প্রসারিত করে, বিভিন্ন স্ক্রিপ্টিং পরিস্থিতির জন্য শক্তিশালী সমাধান প্রদান করে।
ব্যাশ ফাইল ম্যানিপুলেশন সম্পর্কিত প্রায়শই জিজ্ঞাসিত প্রশ্ন
- এর উদ্দেশ্য কি ${FILE%.*} আদেশ?
- এটি শেষ পিরিয়ডের পরে সমস্ত কিছু স্ট্রিপ করে ফাইলের নাম থেকে এক্সটেনশনটি সরিয়ে দেয়।
- কিকরে ${FILE##*.} আদেশ কাজ?
- এটি ফাইলের নামের শেষ সময়ের পরে সবকিছু গ্রহণ করে এক্সটেনশনটি বের করে।
- কি করে awk -F. প্রদত্ত স্ক্রিপ্টে করবেন?
- এটি ফিল্ড বিভাজককে একটি পিরিয়ডে সেট করে, ফাইলের নামটিকে অংশে বিভক্ত করার অনুমতি দেয়।
- কেন ব্যবহার করবেন NF-- একটি মধ্যে awk লিপি?
- এটি ফাইলের নাম থেকে এক্সটেনশনটি কার্যকরভাবে সরিয়ে এক দ্বারা ক্ষেত্রগুলির সংখ্যা হ্রাস করে।
- কিভাবে রেগুলার এক্সপ্রেশন ফাইলের নাম এবং এক্সটেনশন এক্সট্র্যাক্ট করতে সাহায্য করে?
- তারা প্যাটার্ন ম্যাচিং এবং গ্রুপিংয়ের অনুমতি দেয়, যা ফাইলের নামের বিভিন্ন অংশকে আলাদা করতে পারে।
- ব্যাশে একটি কাস্টম ফাংশন ব্যবহার করার সুবিধা কি?
- একটি কাস্টম ফাংশন কোড পুনঃব্যবহারযোগ্যতা এবং পঠনযোগ্যতা বাড়ায়, স্ক্রিপ্টগুলিকে আরও মডুলার করে।
- কিভাবে করে basename ফাইলের নাম সাহায্য?
- এটি একটি সম্পূর্ণ ফাইল পাথ থেকে ফাইলের নাম বের করে, ঐচ্ছিকভাবে এক্সটেনশনটি সরিয়ে দেয়।
- করতে পারা sed ফাইলের নাম ম্যানিপুলেশন জন্য ব্যবহার করা হবে?
- হ্যাঁ, sed ফাইলের নামগুলির অংশগুলিকে রূপান্তর এবং বিচ্ছিন্ন করতে নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারে।
ফাইলের নাম এবং এক্সটেনশন নিষ্কাশনের জন্য সমাধানগুলি মোড়ানো
উপসংহারে, বাশ-এ ফাইলের নাম এবং এক্সটেনশনগুলি নিষ্কাশন করা বিভিন্ন পদ্ধতির মাধ্যমে কার্যকরভাবে অর্জন করা যেতে পারে, প্রতিটি ভিন্ন প্রয়োজন এবং পছন্দের জন্য উপযুক্ত। প্যারামিটার সম্প্রসারণ, awk, sed, বা কাস্টম ফাংশন ব্যবহার করা হোক না কেন, এই কৌশলগুলি নমনীয় এবং দক্ষ সমাধান প্রদান করে। এই কমান্ডগুলি বোঝা এবং ব্যবহার করা নিশ্চিত করে যে স্ক্রিপ্টগুলি ত্রুটি ছাড়াই একাধিক পিরিয়ড এবং অন্যান্য জটিলতার সাথে ফাইলের নাম পরিচালনা করতে পারে।