কখনও কখনও আমরা কোনো ফাইলের ভেতরের লেখা বদলাতে চাই, যেমন Document.txt ফাইলে "my family" লেখাটিকে "us" দিয়ে পরিবর্তন করা। এটি করার জন্য আমরা আমাদের পছন্দের টেক্সট এডিটর (যেমন Kate, Gedit, Sublime Text ইত্যাদি) ব্যবহার করতে পারি, কিন্তু এর বিকল্পগুলো বা একই ফল পাওয়ার অন্যান্য উপায়গুলো জেনে রাখাও সবসময় ভালো।
দেখা যায় যে, রেগুলার এক্সপ্রেশন ব্যবহার করে এটি করা সম্ভব; `sed` কমান্ডটি এক কথায় অসাধারণ, এতে রয়েছে অগণিত বৈচিত্র্য ও অপশন, কিন্তু… যারা সবচেয়ে সহজ উপায়ে শুধু টেক্সট প্রতিস্থাপন করতে চান , তাদের জন্য আমি এই আরও সরল বিকল্পটি নিয়ে এসেছি:
উদাহরণটি অনুসরণ করে, আমাদের কাছে $HOME/Document.txt- এ অবস্থিত Document.txt ফাইলটি রয়েছে , যেখানে নিম্নলিখিত লেখাটি আছে:
আমার পরিবার আর সবার পরিবারের মতোই, আপনার বা আপনার প্রতিবেশীর পরিবারের মতো। সত্যি বলতে, আমার পরিবার সমাজের চোখে দায়িত্বশীল, রাজনৈতিক ও সামাজিকভাবে সঠিক মানুষ হওয়ার চেষ্টা করে। তবে, আমার বাড়িতে একজন ব্যতিক্রমী সদস্য আছে, আর সেই ভূমিকাটা আমারই, হাহাহা! আমি বরাবরই সেই ব্যক্তি যে নিজের ভাবনা প্রকাশ করতে ভয় পায় না (এমনকি তা সামাজিকভাবে গ্রহণযোগ্য না হলেও), যদিও বাস্তবে আমার পরিবার আজকের এই
বিশৃঙ্খলসমাজের উপর ত্যক্তবিরক্ত ।
নিম্নলিখিত কমান্ডটি " my family "-কে " us "-এ পরিবর্তন করবে:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
এটা যে সহজ
সুতরাং পাঠ্যটি হবে:
(…) আমরাও আর সবার মতোই, আপনার বা আপনার প্রতিবেশীর মতো। সত্যি বলতে, আমরা সমাজের চোখে দায়িত্বশীল, রাজনৈতিক ও সামাজিকভাবে সঠিক মানুষ হওয়ার চেষ্টা করি। তবে, আমার বাড়িতে একজন ব্যতিক্রমী মানুষ আছে, আর সেই ভূমিকাটা আমারই, হাহাহা! আমি বরাবরই সেই মানুষ যে নিজের ভাবনা প্রকাশ করতে ভয় পায় না (যদিও তা সমাজের চোখে আপাতদৃষ্টিতে সঠিক না-ও হতে পারে), যদিও বাস্তবে আমার পরিবার আজকের সমাজের
নোংরামিতে অতিষ্ঠ হয়ে উঠেছে।
বাক্য গঠনটি হ'ল:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
কমান্ডটি একটু জটিল মনে হতে পারে, আসুন এটিকে একটু ভেঙে ফেলি এবং এটিকে আরও সহজভাবে ব্যাখ্যা করি
- Perl : আমরা কী ব্যবহার করব, পার্ল
- -পি : পিও, কেমন π (3.14 এর আনুমানিক মান)
- -e : E বাস্তবায়নের জন্য imagine ই এর জন্য এটি কল্পনা করে » ^ - ^
- তারপরে উদ্ধৃতিতে » আমরা একটি দিয়ে খুলুন s এবং আমরা একটি সঙ্গে বন্ধ g: "এসএজি" …শুরু করার জন্য S এবং গেম ওভারের জন্য G কল্পনা করুন
- মধ্যে পালা sg আমাদের অবশ্যই দুটি সেট বন্ধনী স্থাপন করতে হবে: [] y [], সেভাবে হচ্ছে: "এস [] [] জি"
- আমি উপরে যেমন বলেছি প্রথম বন্ধনীগুলির ভিতরে, আমরা যে পাঠ্যটিকে মুছে ফেলতে এবং একটি নতুনের সাথে প্রতিস্থাপন করতে চাইছি সেগুলি চলে যাবে, যখন বন্ধনীগুলির দ্বিতীয় সেটে নতুন পাঠ্যটি যাবে, উদাহরণ অনুসরণ করে: "এস [আমার পরিবার] [আমরা] জি"
সরল তাই না?
ব্যাখ্যাটি আসলে কমান্ডের জন্য প্রয়োজনীয়তার চেয়ে অনেক বেশি দীর্ঘ, এটি বোঝা বেশ সহজ
পার্ল পাঠ্য প্রতিস্থাপনের একটি উপায়ের চেয়ে অনেক বেশি, এটি একটি সম্পূর্ণ ভাষা
আপনি যদি এ সম্পর্কে আরও জানতে চান, তাহলে perl-doc প্যাকেজটি ইনস্টল করুন এবং এটি কী কী করতে পারে তা দেখে নিন; এটি আসলে সম্পূর্ণ ভিন্ন এক জগৎ।
যাইহোক এবং বন্ধ করার জন্য, ধরে নিলাম আপনি যে সমস্ত .txt ফাইলগুলি আপনার / হোম / ডকুমেন্টস / এবং প্রত্যেকটিতে "আমার পরিবার" কে "আমাদের" সাথে প্রতিস্থাপন করতে চান তা খুঁজে পেতে চান, আপনি এটি অর্জন করতে + পার্ল সন্ধানে যোগ দিতে পারেন:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
বা একটি ওয়াইল্ডকার্ড ব্যবহার:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
এই দ্বিতীয় ভেরিয়েন্টের সমস্যা হল যে এটি সাবফোল্ডারে থাকা ফাইলগুলিকে প্রতিস্থাপন করবে না ৷
যাইহোক, আমি আশা করি আপনি এটি আকর্ষণীয় খুঁজে পেয়েছেন. আমার জন্য এটি সত্যিই দরকারী হয়েছে, আমি এখন টার্মিনাল থেকে সরাসরি পাঠ্য প্রতিস্থাপন করতে পারি... দুর্দান্ত!