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

লিনাক্স কমান্ড লাইন ম্যাজিক — ফাইন্ড অ্যান্ড রিপ্লেস

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

যখন আপনি লিনাক্স কমান্ড লাইনে কাজ করছেন এবং আপনি একটি বড় ফাইল বা বড় সংখ্যক ফাইলের সম্মুখীন হন যেগুলোতে আপনাকে একটি নির্দিষ্ট টেক্সট অন্যটি দিয়ে রিপ্লেস করতে হয়, টেক্সটের প্রতিটি ইনস্ট্যান্স খুঁজে পেস্ট ওভার করা কিছুটা টাইম কনসামিং হতে পারে। চিন্তা করবেন না। লিনাক্সের আপনার জন্য ঠিক সমাধান আছে। এখানে একটি পদ্ধতি দেওয়া হলো একটি বা একাধিক ফাইলে টেক্সটের একটি স্ট্রিং অটোমেটিক্যালি ফাইন্ড অ্যান্ড রিপ্লেস করার।

এই এক্সারসাইজের জন্য আমরা একটি লিনাক্স কমান্ড লাইন টুল ব্যবহার করব যেটি "sed" নামে ডাকা হয়। "sed" একটি খুব পাওয়ারফুল এবং ভার্সেটাইল টুল, এবং এর ক্ষমতা নিয়ে অনেক কিছু লেখা যায়। আমরা এখানে "sed"-র একটি খুব সীমিত দিক ব্যবহার করছি। আমি নিশ্চিতভাবে সাজেস্ট করব আপনি "sed"-র ওপর কিছুটা আরও পড়ুন আপনি যদি এর এই দিকটি আপনার জন্য ইন্টেরেস্টিং লাগে।

আমরা একটি ফাইলে টেক্সটের একটি স্ট্রিং ফাইন্ড অ্যান্ড রিপ্লেস করতে নিচের সিনট্যাক্স ব্যবহার করব:

# sed -i ‘s/[orginal_text]/[new_text]/’ filename.txt

মান লজিয় আপনার একটি ফাইল আছে "database.txt" নামে যাতে আপনার ডাটাবেস সার্ভারের IP অ্যাড্রেসের অনেক ইনস্ট্যান্স আছে। আপনি সম্প্রতি একটি নতুন ডাটাবেস সার্ভারে সোয়িচ করেছেন এবং এটিকে নতুন সার্ভারের IP অ্যাড্রেস দিয়ে আপডেট করতে হবে। পুরনো IP অ্যাড্রেস 192.168.1.16 এবং নতুনটি 192.168.1.22। এখানে কীভাবে করবেন:

# cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16

# sed -i ‘s/192.168.1.16/192.168.1.22/g’ database.txt
# cat database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22

এখন ফাইল "database.inc" খুলুন এবং চেক করুন নতুন IP অ্যাড্রেস আপনার পুরনোটির জায়গা নেয়েছে কিনা। উপরের কমান্ডের ব্রেকডাউন। প্রথমে আপনি "sed" কমান্ডটি কল করেন। তারপর আপনি এটিকে প্যারামিটার "-s" পাস করেন যা মানে "in place of"। এখন আমরা রেগুলার এক্সপ্রেশন, যাকে সাধারণত "regex" বলা হয়, এর একটু ব্যবহার করব পরবর্তী বিটের জন্য। কোটেড স্ট্রিং-এ "s" মানে "substitute", এবং শেষে "g" মানে "global"। এগুলো মিলে ফলাফল হয় "global substitution of the the string of text you place in between them."

আপনি অপশনালি শেষে "g" স্কিপ করতে পারেন। এর মানে সাবস্টিটিউশন গ্লোবাল হবে না, যা প্র্যাকটিক্যালি মানে শুধু একটি লাইনে স্ট্রিংটির প্রথম ইনস্ট্যান্সের সাবস্টিটিউশন। তাই আপনার যদি একটি লাইনে একাধিক ইনস্ট্যান্স থাকে যা আপনি রিপ্লেস করতে চাচ্ছেন, এখানে কী হবে:

# cat database.txt
LOCAL_DATABASE = 192.168.1.16
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.16, 192.168.1.16

# sed -i ‘s/192.168.1.16/192.168.1.22/’ database.txt
# cat database.txt
LOCAL_DATABASE = 192.168.1.22
LOCAL_DIR = /home/calvin/
PROD_DB = 192.168.1.22, 192.168.1.16

এখানে আসে আসল ম্যাজিক। এখন, বলুন আপনি একটি স্ট্রিং টেক্সট শুধু একটি ফাইলে নয়, বরং পুরো ডিরেক্টরিতে চেঞ্জ করতে চান যেটিতে আপনি আছেন। অনেক টেক্সট ফাইল আছে যেগুলোতে আপনাকে "wine" কে "champagne" দিয়ে ফাইন্ড অ্যান্ড রিপ্লেস করতে হবে।

# find . -maxdepth 1 -name “*.txt” -type f -exec sed -i ‘s/wine/champagne/’ {} \

আমরা find কমান্ড ব্যবহার করি কারেন্ট ডিরেক্টরিতে সকল টেক্সট ফাইলের তালিকা পাওয়ার জন্য। সেটি হচ্ছে "find . -maxdepth 1 -name “*.txt” -type f" অংশ। "find . maxdepth 1" কম্পিউটারকে বলে কারেন্ট ডিরেক্টরিতে খুঁজুন এবং কারেন্ট ডিরেক্টরির চেয়ে গভীরে যাবেন না। '-name “*.txt”' অংশ find-কে বলে শুধু ".txt" এক্সটেনশন والے ফাইলগুলো লিস্ট করুন। তারপর "-type f" সেকশন স্পেসিফাই করে "find"-কে শুধু এক্সাক্টলি ম্যাচিং ফাইল পিক করতে। অবশেষে "-exec" অংশ "find"-কে বলে যে এরপর যেই কমান্ডটি আসছে সেটি এক্সিকিউট করুন, যা এই কেসে "sed" কমান্ড টেক্সট রিপ্লেস করার জন্য — "sed -i ‘s/wine/champagne/’ {} \"।

এখন আপনি ফাইলে জিনিস ফাইন্ড অ্যান্ড রিপ্লেস করতে জানেন, তাহলে কেন না আমাদের অন্যান্য লিনাক্স টিপস চেক আউট করেন :)

  1. উইন্ডোজ ১০-এ নোটপ্যাডে টেক্সট খুঁজে বের করুন ও প্রতিস্থাপন করুন

  2. fd ব্যবহার করে লিনাক্স এবং macOS-এ ফাইল দ্রুত খুঁজুন

  3. Chrome এবং Firefox-এ টেক্সট খুঁজে বের করুন ও প্রতিস্থাপন করুন

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