Bash:
সিএলআই ওয়ান-লাইনারস দ্বারা ফাইল সম্পাদনা করার উপায়
কিভাবে:
Bash ব্যবহার করে ফাইলগুলি স্থানে সম্পাদনা করার ক্ষেত্রে, দুটি প্রধান টুলের কথা চলে আসে: sed
এবং awk
। কিছু কোডিং উদাহরণের মাধ্যমে আসুন এই শক্তিশালী উপকরণগুলো কিভাবে ব্যবহার করা যায় তা আবিষ্কার করা যাক।
sed
ব্যবহার করে সাধারণ টেক্সট প্রতিস্থাপনের জন্য
নিম্নলিখিত কমান্ড file.txt
ফাইলে “text1” কে “text2” দিয়ে প্রথম ঘটনাটি প্রতিস্থাপন করে:
sed -i 's/text1/text2/' file.txt
প্রতিটি ঘটনার জন্য গ্লোবাল প্রতিস্থাপন করতে শেষে g
যোগ করুন:
sed -i 's/text1/text2/g' file.txt
একাধিক ফাইলে একবারে পরিবর্তন করতে:
sed -i 's/text1/text2/g' file1.txt file2.txt file3.txt
awk
ব্যবহার করে জটিল ম্যানিপুলেশনের জন্য
ফিল্ড-ভিত্তিক তথ্য ব্যবস্থাপনায় বিশেষ দক্ষতা থাকা awk
আরেকটি টুল, যা টেক্সট প্রক্রিয়াকরণে গুরুত্বপূর্ণ।
data.csv
ফাইলে প্রতিটি লাইনের দ্বিতীয় ক্ষেত্রকে ,
(কমা) দ্বারা বিচ্ছিন্ন করে newValue
এ পরিবর্তন করা:
awk -i inplace -F, '{$2="newValue"; print $0}' OFS=, data.csv
লাফ দেওয়ার আগে ব্যাকআপ
একটি বাস্তব পরামর্শ: স্থানে সম্পাদনা করার আগে সর্বদা একটি ব্যাকআপ তৈরি করুন। sed
এ '-i'
অপশনটি একটি সাফিক্সের সাথে ফলো করে ব্যাকআপ তৈরি করতে এই সুবিধার প্রস্তাব করে।
sed -i.bak 's/text1/text2/g' file.txt
এই কমান্ড file.txt
এর একটি ব্যাকআপ file.txt.bak
হিসেবে তৈরি করে তারপর প্রতিস্থাপন সম্পাদন করে।
গভীর ডুব
কমান্ড লাইন থেকে সরাসরি ফাইল সম্পাদনার ক্ষমতা একটি স্বাভাবিক অগ্রগতি হিসেবে উদ্ভব হয়েছে, Unix-এর দর্শনের: যত কম সংখ্যক কী-স্ট্রোকের মাধ্যমে ডেটা কার্যকরীভাবে পরিচালনা ও প্রক্রিয়াজাত করার ক্ষমতা দিয়ে ব্যবহারকারীদের সক্ষম করা। তবে, এই ক্ষমতা তার সতর্কতাসমূহের সাথে আসে।
ঐতিহাসিক প্রেক্ষাপট
Unix টুলগুলি যেমন sed
এবং awk
Unix-এর প্রথম দিনগুলিতে থেকেই আছে, এর টুলকিট দর্শনের অংশ হিসেবে তৈরি, বিশেষজ্ঞ, কম্পোজএবল কমান্ডগুলির উপর মনোনিবেশ করে। তাদের সমাবেশ Unix-এর সামরিকতে ক্ষেত্রে দক্ষ টেক্সট প্রক্রিয়াজাতকরণের প্রয়োজনে একটি সাড়া হিসেবে ঘটেছিল।
বিকল্প
যদিও sed
এবং awk
শক্তিশালী, এগুলি একমাত্র বিকল্প না। উদাহরণস্বরূপ, Perl এবং Python এর কমান্ড-লাইন অপশনগুলি (-p
ও -i
, যথাক্রমে) জটিল অপারেশনের জন্য আরও পঠনযোগ্য সিনট্যাক্সের মাধ্যমে অনুরূপ স্থানে সম্পাদনা ক্ষমতা সম্পাদন করে।
perl -pi -e 's/text1/text2/g' file.txt
python -c "import fileinput, sys; [sys.stdout.write(line.replace('text1', 'text2')) for line in fileinput.input(files='file.txt', inplace=True)]"
প্রতিটি বিকল্পের নিজস্ব শক্তিগুলি রয়েছে: Perl-এর এক-লাইনের ক্ষমতা অসীম, এবং Python-এর সিনট্যাক্স Unix টেক্সট প্রক্রিয়াজাতকারী টুলগুলিতে গভীরভাবে পারদর্শী নয় এমন ব্যক্তিদের কাছে সম্ভবত আরও অ্যাক্সেসযোগ্য।
বাস্তবায়নের বিস্তারিত
স্থানে সম্পাদনা কারগতিক অর্থে সত্যিকারের “স্থানে” না। sed -i
এবং awk -i inplace
উভয়ই একটি অস্থায়ী ফাইলে প্রক্রিয়াজাত আউটপুট সংরক্ষণ করে শুরু করে, মূল ফাইল প্রতিস্থাপনের আগে। এই পদ্ধতি নিশ্চিত করে যে প্রক্রিয়া ব্যাহত হলে ফাইল দূষিত হবে না। প্রধানত রিসোর্স এবং অনুমতির উপর প্রভাব পড়ে: আপনার লক্ষ্য ফাইলের ডিরেক্টরিতে ফাইল তৈরি করার অনুমতি এবং অস্থায়ী ফাইলের জন্য যথেষ্ট ডিস্ক স্পেস থাকতে হবে।
শক্তিশালী হলেও, স্থানে সম্পাদনা কমান্ডগুলি সতর্কতার সাথে ব্যবহার করতে হবে। একটি ভুল রেগেক্স ডেটা হ্রাসের কারণ হতে পারে, যা ব্যাকআপের গুরুত্ব বৃদ্ধি করে। সম্ভাব্য পিটফলস সত্ত্বেও, এই কমান্ডগুলি দক্ষতার সাথে শেখা আপনার ক্ষমতাকে কমান্ড লাইন থেকে সরাসরি, দ্রুত কার্যকরী ফাইল সংশোধন সম্পাদনে উল্লেখযোগ্যভাবে বৃদ্ধি করতে পারে, Unix দর্শনের সহজ, শক্তিশালী টুলগুলি জটিল কাজ সম্পাদনের জন্য ব্যবহারের মাধ্যমে প্রকাশ করা।