Skip to content
টেক্সট খুঁজুন ও প্রতিস্থাপন করুন
Tools

টেক্সট খুঁজুন ও প্রতিস্থাপন করুন

নতুন

প্লেইন টেক্সট বা regex দিয়ে বাল্কে টেক্সট প্রতিস্থাপন করুন — কেস উপেক্ষা ও সম্পূর্ণ-শব্দ সহ।

0 chars 0 words 0 lines

Runs entirely in your browser. Nothing is uploaded.

অনলাইনে টেক্সট খুঁজুন ও পরিবর্তন করুন — রেজেক্স বা প্লেইন টেক্সট দিয়ে

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

একে সাধারণ প্লেইন-টেক্সট রিপ্লেসার হিসেবে ব্যবহার করুন, বা প্যাটার্ন-ভিত্তিক পরিবর্তনের জন্য রেজেক্স চালু করুন। এটি অনলাইনে এবং সম্পূর্ণভাবে আপনার ব্রাউজারে চলে, তাই ইনস্টল করার কিছু নেই এবং আপনার টেক্সট কখনও ডিভাইস ছেড়ে যায় না — এক্সপোর্ট করা ডেটা, কোড, CSV ফাইল, লগ বা যেকোনো পুনরাবৃত্তিমূলক এডিট পরিষ্কার করার জন্য আদর্শ। আইফোন, অ্যান্ড্রয়েড ও ডেস্কটপে সমানভাবে ভালো কাজ করে।

ক্যাপচার গ্রুপসহ রেজেক্স ফাইন্ড অ্যান্ড রিপ্লেস

Find বক্সকে একটি পূর্ণ জাভাস্ক্রিপ্ট রেগুলার এক্সপ্রেশন হিসেবে ট্রিট করতে Regex চালু করুন, i, m এবং s ফ্ল্যাগ এক চিপ-ট্যাপ দূরে (g সবসময় চালু থাকে যাতে প্রতিটি ম্যাচ পরিবর্তিত হয়)। \\d{4} বা \\b[A-Z]\\w+-এর মতো প্যাটার্ন আপনাকে ঠিক শব্দ নয়, আকৃতি দিয়ে মিলাতে দেয়।

এই রেজেক্স ফাইন্ড অ্যান্ড রিপ্লেস অনলাইন টুল যেখানে আলাদা: ক্যাপচার গ্রুপ। প্যাটার্নের একটি অংশ বন্ধনীতে মুড়ে দিন এবং পরিবর্তনে $1, $2 বা $& দিয়ে পুনরায় ব্যবহার করুন। (\\d{4})-(\\d{2})-(\\d{2}) খুঁজে $3/$2/$1 দিয়ে পরিবর্তন করে ISO তারিখ রিফরম্যাট করুন, বা ইমেইল ঠিকানা পুনর্লিখনে (\\w+)@(\\w+) ক্যাপচার করুন। অবৈধ প্যাটার্ন নিঃশব্দে ব্যর্থ না হয়ে একটি স্পষ্ট ইনলাইন এরর দেখায়।

একসাথে একাধিক ফাইন্ড অ্যান্ড রিপ্লেস

বেশিরভাগ অনলাইন রিপ্লেসার একবারে শুধু একটি জোড়া সামলাতে পারে। Multiple rules মোডে যান একটি find→replace জোড়ার একটি লিস্ট সাজাতে যা একের পর এক ক্রমে প্রয়োগ হয়, উপর থেকে নিচে — প্রকৃত একাধিক ফাইন্ড অ্যান্ড রিপ্লেস অনলাইন। প্রতিটি নিয়মের ফলাফল পরের নিয়মে যায়, তাই আপনি এক ক্লিকেই একটি সম্পূর্ণ পরিষ্কার-পর্ব চেইন করতে পারেন।

প্রতিটি নিয়মের নিজস্ব Regex, Match-case এবং Whole-word টগল আছে, আর একটি এনেবল চেকবক্স আছে যাতে আপনি একটি ধাপ মুছে না ফেলে বন্ধ করতে পারেন। এটি টার্মিনোলজি স্ট্যান্ডার্ডাইজ করা, বেশ কিছু পুনরাবৃত্ত টাইপো ঠিক করা, বা পেস্ট করা টেক্সটের উপর একটি পুনরাবৃত্তিযোগ্য ব্যাচ ফাইন্ড অ্যান্ড রিপ্লেস চালানোর জন্য কাজে আসে। Word বা Google Docs-এ একবারে একটি করে সাবস্টিটিউশন করার চেয়ে এটি ভালো।

নির্ভুল ম্যাচিং: কেস, হোল ওয়ার্ড, লাইন ব্রেক ও ট্যাব

প্লেইন-টেক্সট মোডে, Match case 'Apple'-কে 'apple' থেকে আলাদা করে, আর Whole word একটি টার্ম শুধু তখনই মেলায় যখন সেটি একা থাকে — তাই 'cat' পরিবর্তন করলে 'category' বা 'scatter' প্রভাবিত হবে না। যেকোনো বক্সে লাইন ব্রেকের জন্য \\n, ট্যাবের জন্য \\t এবং ব্যাকস্ল্যাশের জন্য \\\\ ব্যবহার করতে Interpret \\n \\t চালু করুন।

এটি অস্বস্তিকর কাজ সহজ করে দেয়: একটি কমা লিস্ট আলাদা লাইনে ভাগ করতে , খুঁজে \\n দিয়ে পরিবর্তন করুন, বা ট্যাব-ইন্ডেন্টেড টেক্সট ফ্ল্যাট করতে \\t খুঁজে একটি স্পেস দিয়ে পরিবর্তন করুন। Replace বক্স খালি রেখে শুধু একটি শব্দ বা অক্ষর মুছুন যেখানেই তা দেখা যায়।

Word, Google Docs, Notepad++ এবং VS Code-এর সাথে এটি কেমন

Microsoft Word-এ ওয়াইল্ডকার্ড সাপোর্টসহ Find & Replace আছে, কিন্তু সিনট্যাক্স স্ট্যান্ডার্ড রেজেক্স থেকে ভিন্ন (Word ওয়াইল্ডকার্ডে হোল ওয়ার্ডের জন্য <cat> লেখেন, \\bcat\\b নয়), এবং এটি শুধু Word-এর ভেতরের ডকুমেন্টে কাজ করে। Google Docs ২০১৯-এ বেসিক রেজেক্স যোগ করেছে কিন্তু এখনও পরিবর্তনে ক্যাপচার গ্রুপ সমর্থন করে না — Docs-এ $1/$2/$3 দিয়ে তারিখ রিফরম্যাট করা যায় না। Notepad++-এ চমৎকার রেজেক্স সাপোর্ট আছে কিন্তু Windows ইনস্টল প্রয়োজন এবং শুধু ডিস্কের ফাইলে কাজ করে।

VS Code এদের মধ্যে সবচেয়ে সক্ষম — ক্যাপচার গ্রুপসহ পূর্ণ রেজেক্স এবং মাল্টি-ফাইল ফাইন্ড-রিপ্লেস — কিন্তু আপনার শুধু পেস্ট করা কিছু টেক্সট পরিষ্কার করতে হলে প্রজেক্ট ফোল্ডার না খুলেই এটি বেশি জটিল। এই টুল সেই ফাঁকটা পূরণ করে: যেকোনো টেক্সট পেস্ট করুন, ক্যাপচার গ্রুপসহ রেজেক্স চালান, একাধিক নিয়ম সাজান, এবং সেকেন্ডের মধ্যে যেকোনো ডিভাইসে ফলাফল কপি করুন, কিছুই ইনস্টল না করে এবং কিছু আপলোড না করে।

প্রাইভেট, তাৎক্ষণিক এবং ফ্রি

একটি এক-শব্দের ফিক্স থেকে একটি সম্পূর্ণ ডকুমেন্ট পর্যন্ত প্রতিটি পরিবর্তন আপনার ব্রাউজারে স্থানীয়ভাবে ঘটে, তাই সোর্স কোড, চুক্তিপত্র বা লগের মতো স্পর্শকাতর টেক্সটও ডিভাইসে থেকে যায়। কোনো সাইনআপ নেই, আপলোড নেই এবং খরচ নেই। প্রথম লোডের পর টুলটি অফলাইনেও কাজ করে, তাই আপনি বিমানে বা দুর্বল সংযোগেও এটি ব্যবহার করতে পারেন।

পরের বার দ্রুত টেক্সট পুনর্গঠন করতে এই ফাইন্ড অ্যান্ড রিপ্লেস টুল বুকমার্ক করে রাখুন। এক্সপোর্ট করা CSV ডেটা পরিষ্কার করা, কোডের একটি ব্লক রিফরম্যাট করা, একটি ডকুমেন্ট জুড়ে টার্মিনোলজি স্ট্যান্ডার্ডাইজ করা, বা একটি লগ ফাইল থেকে অবাঞ্ছিত অক্ষর সরানো — যাই হোক, এটি আপনার ব্রাউজারে, ফ্রি, সবকিছু সামলে দেয়।

রেজেক্স গভীরে: অ্যাঙ্কর, ক্যারেক্টার ক্লাস, কোয়ান্টিফায়ার এবং ব্যাকরেফারেন্স

অ্যাঙ্কর একটি প্যাটার্নকে অক্ষরের বদলে একটি অবস্থানে পিন করে। ^ একটি লাইনের শুরু মেলায় এবং $ শেষ মেলায়, তাই ^\s+ প্যাটার্ন শুধু লিডিং হোয়াইটস্পেস টার্গেট করে এবং \s+$ শুধু ট্রেইলিং হোয়াইটস্পেস টার্গেট করে — অভ্যন্তরীণ স্পেস স্পর্শ না করেই প্রতিটি লাইন ট্রিম করতে খালি রিপ্লেসমেন্টসহ পরেরটি ব্যবহার করুন। ক্যারেক্টার ক্লাস একটি সেট থেকে যেকোনো একটি অক্ষর মেলায়: [a-z] যেকোনো ছোট হাতের অক্ষর, [0-9] যেকোনো সংখ্যা, আর শর্টহ্যান্ড \w (word character: অক্ষর, সংখ্যা, আন্ডারস্কোর), \d (সংখ্যা) এবং \s (হোয়াইটস্পেস) সবচেয়ে সাধারণ ক্ষেত্র কভার করে। বন্ধনীর ভেতরে ^ দিয়ে একটি ক্লাস নেগেট করুন — [^\d] যেকোনো নন-ডিজিট মেলায়।

কোয়ান্টিফায়ার নিয়ন্ত্রণ করে আগের এলিমেন্টটি কতবার মিলতে হবে। * মানে শূন্য বা তার বেশি, + মানে এক বা তার বেশি, ? মানে শূন্য বা এক, এবং {n,m} মানে n থেকে m বার — তাই \d{2,4} দুই-, তিন- বা চার-অঙ্কের সংখ্যা মেলায়। ডিফল্টভাবে কোয়ান্টিফায়ার গ্রিডি: .+ ব্যাকট্র্যাক করার আগে যতটা সম্ভব টেক্সট গিলে ফেলবে। এগুলোকে লেজি করতে ? যোগ করুন: .+? যতটা সম্ভব কম মেলায়। HTML ট্যাগ সরানোর সময় এই পার্থক্য গুরুত্বপূর্ণ — <.+> লাইনের প্রথম < থেকে শেষ > পর্যন্ত সবকিছু গ্রিডিভাবে গিলে ফেলে, যেখানে <.+?> (বা আরও নির্ভুল <[^>]+>) প্রতিটি পৃথক ট্যাগ মেলায়। মার্কআপের একটি ব্লক থেকে সব HTML ট্যাগ সরাতে <[^>]+> কিছু না দিয়ে পরিবর্তন করুন।

ক্যাপচার গ্রুপ একটি সাব-প্যাটার্ন বন্ধনীতে মুড়ে যা মেলে তা সংরক্ষণ করে যাতে পরিবর্তনের স্ট্রিংয়ে পুনরায় ব্যবহার করা যায়। "the the"-এর মতো পুনরাবৃত্ত আশপাশের শব্দ খুঁজতে (\w+)\s+\1 খুঁজুন (\1 ব্যাকরেফারেন্স প্রথম গ্রুপ যা মেলে সেই একই টেক্সট মেলায়)। দুটি শব্দ অদলবদল করতে, (foo)(bar) খুঁজে $2$1 দিয়ে পরিবর্তন করুন — রিপ্লেসমেন্টের ডলার-সাইন সিনট্যাক্স হলো $1, $2, ইত্যাদি। বাস্তব-জীবনের প্যাটার্ন: বিভিন্ন ফরম্যাটে ফোন নম্বর মেলাতে ^(\+?\d[\d\s\-().]{7,})$ খুঁজুন এবং একটি নরমালাইজড ফর্ম দিয়ে পরিবর্তন করুন; সব URL এক্সট্র্যাক্ট করতে https?://[^\s"'>]+ খুঁজুন; প্রতিটি লাইনের ট্রেইলিং হোয়াইটস্পেস ধরতে \s+$ খুঁজুন। এই প্যাটার্নগুলো এমন কাজ সামলায় যার জন্য অন্যথায় একটি কাস্টম স্ক্রিপ্ট লাগত।

কেস-সেনসিটিভ, কেস-ইনসেনসিটিভ এবং কেস-প্রিজার্ভিং রিপ্লেসমেন্ট

বেশিরভাগ ওয়ার্ড প্রসেসর ডিফল্টভাবে কেস-ইনসেনসিটিভ সার্চ ব্যবহার করে কারণ ব্যবহারকারীরা সাধারণত ক্যাপিটালাইজেশন যাই হোক না কেন একটি শব্দ খুঁজে পেতে চান। কোড এডিটর, বিপরীতে, ডিফল্টভাবে কেস-সেনসিটিভ ম্যাচিং ব্যবহার করে, কারণ useState এবং usestate সত্যিকারভাবেই ভিন্ন আইডেন্টিফায়ার। আপনার টুল কোন মোডে আছে তা বোঝা কমেন্ট আপডেট করার সময় শুধু ভুলবশত একটি কনস্ট্যান্ট রিনেম করার সাধারণ বাগ থেকে বাঁচায়। একটি রেজেক্স ইঞ্জিনে i ফ্ল্যাগ কেস-ইনসেনসিটিভ ম্যাচিং সক্ষম করে — প্যাটার্ন /colour/i "colour", "Colour", "COLOUR" এবং প্রতিটি মিশ্র-কেস ভ্যারিয়েন্ট মেলায়।

স্মার্ট কেস (Vim দ্বারা জনপ্রিয় এবং VS Code দ্বারা গৃহীত) একটি মাঝামাঝি সমাধান দেয়: কোয়েরি স্ট্রিং সম্পূর্ণভাবে ছোট হাতের হলে সার্চ কেস-ইনসেনসিটিভ, আর কোয়েরিতে যেকোনো বড় হাতের অক্ষর থাকলেই তা কেস-সেনসিটিভ হয়ে যায়। colour টাইপ করলে সব ভ্যারিয়েন্ট মেলে; Colour টাইপ করলে শুধু ক্যাপিটালাইজড ফর্ম মেলে। এটি দ্রুত টাইপিস্টদের কখনও টগল না উল্টিয়েই ডিফল্টভাবে ছোট হাতে কাজ করতে দেয়। VS Code-এর Find in Files "Match Case" বন্ধ থাকলে এই আচরণ উত্তরাধিকার সূত্রে পায়, কিন্তু সার্চ টার্মে একটি ক্যাপিটাল থাকলে।

কেস-প্রিজার্ভিং রিপ্লেসমেন্ট আরও এগিয়ে যায়: একটি একক রিপ্লেস কমান্ড "colour" → "color", "Colour" → "Color", এবং "COLOUR" → "COLOR" একই সাথে বদলায়, প্রতিটি পৃথক ম্যাচের ক্যাপিটালাইজেশন প্যাটার্ন সংরক্ষণ করে। VS Code এটি রিপ্লেসমেন্ট স্ট্রিংয়ে বিশেষ escape সিকোয়েন্স ব্যবহার করে বাস্তবায়ন করে — \u পরের অক্ষর বড় হাতের করে, \l ছোট হাতের করে, \U পুরো পরবর্তী গ্রুপ বড় হাতের করে, এবং \L ছোট হাতের করে। তাই colour (match case বন্ধ) খুঁজে \u\Lcolor দিয়ে পরিবর্তন করলে টাইটেল-কেস ম্যাচ সঠিকভাবে সংরক্ষিত হয়। বেশিরভাগ দৈনন্দিন কাজের জন্য সহজ পদ্ধতি হলো দুই বা তিনটি আলাদা পরিবর্তন চালানো (একটি সব-ক্যাপসের জন্য, একটি টাইটেল-কেসের জন্য, একটি ছোট হাতের জন্য), যা ঠিক এই টুলের Multiple rules মোড সক্ষম করে।

একাধিক ফাইলে প্রজেক্ট-ওয়াইড ফাইন্ড অ্যান্ড রিপ্লেস

একক-ফাইল পরিবর্তন গল্পের অর্ধেক মাত্র — একটি সম্পূর্ণ কোডবেস জুড়ে একটি ভেরিয়েবল রিনেম করা বা হাজার হাজার ডকুমেন্ট জুড়ে একটি ব্র্যান্ড নাম আপডেট করার জন্য প্রজেক্ট-ওয়াইড সার্চ অ্যান্ড রিপ্লেস প্রয়োজন। Unix টুলচেইন এটি কভার করে: grep -rn "old_text" . প্রতিটি ঘটনা পুনরাবৃত্তিমূলকভাবে খুঁজে বের করে ও লাইন নম্বর দেখায়, আর পরিবর্তনটি নিজেই sed দিয়ে সামলানো হয়: sed -i 's/old/new/g' $(grep -rl "old" .) প্রতিটি মিলে যাওয়া ফাইল আগের অবস্থানেই পুনরায় লেখে। ripgrep (rg) আধুনিক, দ্রুততর বিকল্প — rg "old" --files-with-matches | xargs sed -i 's/old/new/g' এর উচ্চ-গতির সার্চকে sed-এর সাবস্টিটিউশনের সাথে জোড়ে। শেল ছাড়া Windows ব্যবহারকারীদের জন্য, VS Code-এর Find in Files (Ctrl+Shift+H) একটি GUI-এর মাধ্যমে একই সক্ষমতা দেয়, যার মধ্যে ক্যাপচার গ্রুপসহ পূর্ণ রেজেক্স এবং লেখার আগে সব পরিবর্তনের একটি প্রিভিউও আছে।

যেকোনো ব্যাপক পরিবর্তনের আগে ভার্সন কন্ট্রোল অপরিহার্য। প্রথমে সব বর্তমান পরিবর্তন স্টেজ করুন যাতে ফাইন্ড/রিপ্লেসের পুরো ডিফটি একটি রিভিউযোগ্য কমিটে বিচ্ছিন্ন হয়ে থাকে। অপারেশনের পর git diff ঠিক দেখায় কোন ফাইলের কোন লাইন বদলেছে — সেই নিরাপত্তা ছাড়া, একটি খারাপভাবে স্কোপড প্যাটার্ন নিঃশব্দে কয়েক ডজন ফাইল নষ্ট করে দিতে পারে। ক্লাসিক দুর্যোগ হলো word boundary ছাড়া id বা type-এর মতো একটি ছোট, সাধারণ সাবস্ট্রিং পরিবর্তন করা: প্যাটার্নটি লম্বা আইডেন্টিফায়ারের ভেতরে মিলে যায়, এমন ফাইলে ভেরিয়েবল নাম ও ফাংশন কল ভেঙে ফেলে যা আপনি কখনও স্পর্শ করার ইচ্ছা করেননি। পুরো প্রজেক্ট জুড়ে চালানোর আগে সবসময় একটি একক ফাইল বা ছোট স্যাম্পলের বিপরীতে প্যাটার্নটি টেস্ট করুন।

তাই ড্রাই-রান নীতি স্ট্যান্ডার্ড অনুশীলন: প্রথমে সার্চ পাসটি চালান (grep বা ripgrep) এবং একটি বাইটও লেখার আগে প্রতিটি মিলে যাওয়া লাইন রিভিউ করুন। কিছু টুল এটি স্পষ্ট করে তোলে — sed-এর --dry-run সার্বজনীন নয়, কিন্তু বেশিরভাগ IDE একটি পূর্ণ প্রিভিউ ডিফ দেখায়। JSON, XML এবং HTML-এর মতো স্ট্রাকচার্ড ফরম্যাটের জন্য, র্র টেক্সট ফাইন্ড/রিপ্লেস প্রায় সবসময়ই ভুল টুল: একটি প্যাটার্ন যা একটি ভ্যালু টার্গেট করে দুর্ঘটনাক্রমে একই টেক্সটসহ একটি কী মেলাতে পারে, বা একটি ট্যাগের ভেতরে একটি অ্যাট্রিবিউট নাম মিলিয়ে ফেলতে পারে। সঠিক পদ্ধতি হলো প্রথমে পার্স করা, একটি পাথ এক্সপ্রেশন দিয়ে টার্গেট করা, তারপর সিরিয়ালাইজ করা — JSON-এর জন্য jq '.users[].name = "updated"', XML-এর জন্য xmlstarlet ed, এবং ডেটাবেস রেকর্ডের জন্য SQL-এর UPDATE … SET … WHERE। অস্ট্রাকচার্ড বা আধা-স্ট্রাকচার্ড কনটেন্টের জন্য যেখানে একটি পার্সার অতিরিক্ত হবে সেখানে টেক্সট-লেভেল ফাইন্ড/রিপ্লেস রাখুন।

টেক্সট সার্চের একটি সংক্ষিপ্ত ইতিহাস

grep কমান্ড — সংক্ষেপে Global Regular Expression Print — Ken Thompson ১৯৭৩ সালে Unix-এর জন্য লিখেছিলেন। Thompson ed লাইন এডিটর থেকে g/re/p কমান্ড নিষ্কাশন করেন (যা নিজেই একটি গ্লোবাল সাবস্টিটিউশন g/regex/s/old/new/ হিসেবে প্রকাশ করত) এবং এটিকে একটি স্বতন্ত্র টুল হিসেবে প্যাকেজ করেন। Alfred Aho ১৯৭৫ সালে egrep (যা alternation | ও grouping () যোগ করেছিল) এবং fgrep (যা রেজেক্স ওভারহেড ছাড়াই ফিক্সড স্ট্রিং খুঁজত) দিয়ে এটি বিস্তৃত করেন, পূর্ণ-রেজেক্স, এক্সটেন্ডেড-রেজেক্স এবং লিটারাল-স্ট্রিং সার্চের তিন-দিকের বিভাজন প্রতিষ্ঠা করেন যা এখনও অনেক টুল প্রতিফলিত করে।

১৯৭৭ সালে দুটি ল্যান্ডমার্ক অ্যালগরিদম এসেছিল যা এখন ব্যবহৃত প্রায় প্রতিটি সার্চ টুলের ভিত্তি। Boyer-Moore অ্যালগরিদম (Robert Boyer ও J Strother Moore) সার্চ প্যাটার্ন প্রি-প্রসেস করে দুটি হিউরিস্টিক টেবিল তৈরি করে — bad-character টেবিল ও good-suffix টেবিল — যা সার্চকে ইনপুট টেক্সটের বড় অংশ এড়িয়ে যেতে দেয় প্রতিটি অক্ষর পরীক্ষা করার বদলে। দীর্ঘ প্যাটার্নের জন্য দীর্ঘ টেক্সটে সার্চ করলে, এটি ব্যবহারিকভাবে সাব-লিনিয়ার সময় অর্জন করে, অর্থাৎ অ্যালগরিদম ডকুমেন্টে যতগুলো অক্ষর আছে তার চেয়ে কম অক্ষর স্ক্যান করে। Knuth-Morris-Pratt অ্যালগরিদম (Donald Knuth, Vaughan Pratt ও James Morris, একই বছর ১৯৭৭) সমস্যাটির ভিন্নভাবে সমাধান করে: এটি প্যাটার্ন থেকে একটি ফেইলিওর ফাংশন প্রি-কম্পিউট করে যাতে একটি অমিল ঘটলে এটি প্যাটার্নের সবচেয়ে দীর্ঘ প্রেফিক্স থেকে পুনরায় শুরু করতে পারে যা এখনও পর্যন্ত স্ক্যান করা টেক্সটের একটি সাফিক্সও, কোনো ব্যাকট্র্যাকিং ছাড়াই লিনিয়ার সময় O(n + m) নিশ্চিত করে।

আধুনিক এডিটর লক্ষ লক্ষ লাইন কোনো লক্ষণীয় বিলম্ব ছাড়াই সামলাতে এই ধারণাগুলোর সাথে আরও কৌশল যোগ করে। Ripgrep, সবচেয়ে বেশি ব্যবহৃত দ্রুততম সার্চ টুল, একসাথে ১৬ বা ৩২ বাইট স্ক্যান করতে SIMD (single-instruction, multiple-data) CPU ইনস্ট্রাকশন প্রয়োগ করে, একটি রেজেক্স থেকে ফিক্সড বাইট সিকোয়েন্স নিষ্কাশন করতে এবং পূর্ণ রেজেক্স ইঞ্জিন চালুর আগে একটি Boyer-Moore-Horspool পাস চালাতে একটি লিটারাল অপ্টিমাইজার ব্যবহার করে, এবং অপ্রাসঙ্গিক ফাইল এড়িয়ে যেতে .gitignore নিয়ম মেনে চলে। VS Code-এর সার্চ ওয়ার্কস্পেসের উপর একটি ট্রাইগ্রাম ইনডেক্স তৈরি করে যাতে বিরল তিন-অক্ষরের সিকোয়েন্সের সার্চ একটি পূর্ণ ফাইল স্ক্যানের বদলে একটি একক ইনডেক্স লুকআপ দিয়ে সমাধান হয়। ফলাফল — লক্ষ লক্ষ লাইনের একটি রিপোজিটরি জুড়ে প্রায়-তাৎক্ষণিক সার্চ — Thompson-এর ১৯৭৩-এর grep পর্যন্ত সরাসরি ফিরে যাওয়া প্রায় পঞ্চাশ বছরের ক্রমবর্ধমান অ্যালগরিদমিক পরিশোধনের ফলাফল।

Frequently asked questions

আমি কীভাবে অনলাইনে টেক্সট খুঁজে পরিবর্তন করব?

আপনার টেক্সট এডিটরে পেস্ট বা টাইপ করুন, Find বক্সে যা খুঁজতে চান তা লিখুন এবং Replace with বক্সে নতুন টেক্সট লিখুন, তারপর Replace all ক্লিক করুন। প্রতিটি ম্যাচ একসাথে বদলে যায় এবং লাইভ কাউন্টার দেখায় কতগুলো পাওয়া গেছে — উদাহরণস্বরূপ, একটি ২,০০০-শব্দের ডকুমেন্টে 'colour' টাইপ করে 'color' দিয়ে পরিবর্তন করলে সবগুলো ১৪টি ঘটনা তাৎক্ষণিক আপডেট হয়। ফলাফল সংরক্ষণ করতে Copy বা Download ক্লিক করুন। কোনো অ্যাকাউন্ট নেই, আপলোড নেই, যেকোনো ডিভাইসে কাজ করে।

রেজেক্স দিয়ে কীভাবে খুঁজে পরিবর্তন করব?

Regex চালু করুন আর Find বক্সটি একটি রেগুলার এক্সপ্রেশন হিসেবে ট্রিট করা হবে। প্যাটার্ন \\d{4} যেকোনো চার-অঙ্কের সংখ্যা মেলায়; (\\w+)@(\\w+) একটি ইউজারনেম ও ডোমেইন ক্যাপচার করে। i, m এবং s ফ্ল্যাগ চিপ ব্যবহার করে ম্যাচিং নিয়ন্ত্রণ করুন, এবং আপনি যা ক্যাপচার করেছেন তা পুনরায় ব্যবহার করতে Replace বক্সে $1, $2 বসান — তাই (\\w+)@(\\w+)\\.com খুঁজে $1 at $2 দিয়ে পরিবর্তন করলে 'jane@acme.com' 'jane at acme'-এ পরিণত হয়। অবৈধ প্যাটার্ন নিঃশব্দে ব্যর্থ না হয়ে একটি স্পষ্ট ইনলাইন এরর দেখায়।

একসাথে একাধিক ফাইন্ড-অ্যান্ড-রিপ্লেস কীভাবে করব?

Multiple rules মোডে যান এবং প্রতিটি find→replace জোড়ার জন্য একটি সারি যোগ করুন। নিয়মগুলো উপর থেকে নিচে ক্রমে চলে, তাই নিয়ম ১-এর আউটপুট নিয়ম ২-এর ইনপুট হয়ে যায়। উদাহরণস্বরূপ, নিয়ম ১ 'Mr.'-কে 'Mister' দিয়ে পরিবর্তন করে এবং নিয়ম ২ 'Dr.'-কে 'Doctor' দিয়ে পরিবর্তন করে — একবার Apply rules ক্লিক করলে দুটো পাসই একসাথে ঘটে। যেকোনো সারিতে চেকবক্স টগল করে এটি মুছে না ফেলে চালু বা বন্ধ করুন। বাল্ক পরিষ্কার কাজের জন্য এটি Word-এর একবারে-একটি রিপ্লেস ডায়ালগকে হারায়।

ফাইন্ড-অ্যান্ড-রিপ্লেস কেস-সেনসিটিভ বা হোল-ওয়ার্ড-শুধু কীভাবে বানাব?

Match case চালু করুন যাতে 'Apple' আর 'apple'-এর সাথে না মেলে, এবং Whole word চালু করুন যাতে 'cat' শুধু একা শব্দ হিসেবে মেলে কিন্তু 'category' বা 'scatter'-এর সাথে না মেলে। Whole word স্বয়ংক্রিয়ভাবে আপনার টার্মকে word boundary (\\b) দিয়ে মুড়ে দেয়। Regex মোডে, কেস-ইনসেনসিটিভ ম্যাচিংয়ের জন্য i ফ্ল্যাগ চিপ ব্যবহার করুন এবং নিজে \\b যোগ করে word boundary যোগ করুন। এই অপশনগুলো স্বাধীনভাবে কাজ করে এবং একসাথে মেলানো যায়।

একটি লাইন ব্রেক বা ট্যাব অক্ষর কীভাবে পরিবর্তন করব?

'Interpret \\n \\t' অপশন চালু করুন, তারপর একটি লাইন ব্রেকের জন্য \\n, একটি ট্যাবের জন্য \\t বা একটি লিটারাল ব্যাকস্ল্যাশের জন্য \\\\ যেকোনো বক্সে টাইপ করুন। প্রতিটি কমা-দিয়ে-আলাদা করা আইটেমকে নিজস্ব লাইনে বসাতে ', ' খুঁজে \\n দিয়ে পরিবর্তন করুন। ট্যাব-ইন্ডেন্টেড টেক্সট ফ্ল্যাট করতে \\t খুঁজে একটি স্পেস দিয়ে পরিবর্তন করুন। এই অপশন ছাড়া, \\n-কে দুটি লিটারাল অক্ষর ব্যাকস্ল্যাশ ও n হিসেবে ট্রিট করা হয়, যা কাজে আসে যখন আপনি সোর্স কোডে আসলেই '\\n' স্ট্রিং খুঁজতে চান।

কতগুলো ম্যাচ আছে তা কীভাবে গণনা করব?

আপনি Find বক্সে টাইপ করার সাথে সাথে ম্যাচ কাউন্টার লাইভ আপডেট হয়, এডিটরের পাশে '১৪ matches'-এর মতো কিছু দেখায় এবং টেক্সটে সরাসরি প্রতিটি হিট হাইলাইট করে। Replace all ক্লিক করার পর, একটি সারাংশ লাইন নিশ্চিত করে ঠিক কতগুলো পরিবর্তন হয়েছে, তাই কপি করার আগে আপনি পরিবর্তনটি যাচাই করতে পারেন। এটি Word-এর 'X replacements were made' ডায়ালগের চেয়ে বেশি স্বচ্ছ যা শুধু ঘটনার পরে দেখা যায়।

আমি কি পরিবর্তনে ক্যাপচার গ্রুপ ($1, $2) ব্যবহার করতে পারি?

হ্যাঁ, Regex মোডে। আপনার প্যাটার্নের একটি অংশ বন্ধনীতে মুড়ে ক্যাপচার করুন, তারপর Replace বক্সে $1, $2 এবং এভাবে রেফারেন্স করুন। (\\d{4})-(\\d{2})-(\\d{2}) খুঁজে $3/$2/$1 দিয়ে পরিবর্তন করে '2026-06-11'-এর মতো ISO তারিখকে '11/06/2026'-এ রূপান্তর করুন। পুরো ম্যাচটি অপরিবর্তিতভাবে বসাতে $& ব্যবহার করুন। প্লেইন-টেক্সট মোডে, $1 লিটারালভাবে ইনসার্ট হয় কারণ কোনো গ্রুপ নেই — যা আউটপুটে একটি লিটারাল ডলার সাইন দরকার হলেও কাজে আসে।

আমার টেক্সট কি কোথাও আপলোড হয়?

না। প্রতিটি ফাইন্ড-অ্যান্ড-রিপ্লেস সম্পূর্ণভাবে আপনার ব্রাউজারে জাভাস্ক্রিপ্ট দিয়ে চলে — আপনার টেক্সট কখনও কোনো সার্ভারে পাঠানো, লগ বা সংরক্ষণ করা হয় না, এবং পেজ একবার লোড হওয়ার পর টুলটি অফলাইনেও কাজ করতে থাকে। এটি সোর্স কোড, চুক্তিপত্র, লগ বা ব্যক্তিগত ডেটার মতো কনফিডেনশিয়াল কনটেন্টের জন্য নিরাপদ করে তোলে। এটি এমন ওয়েব-ভিত্তিক টেক্সট এডিটরের বিপরীতে যা আপনার কনটেন্ট একটি ক্লাউড অ্যাকাউন্টে সিঙ্ক করে, বা অনলাইন টুল যা সার্ভারে প্রসেসিং চালায়।

Word বা Google Docs-এর Find & Replace থেকে এটি কীভাবে ভিন্ন?

এটি যেকোনো টেক্সটে কাজ করে যা আপনি পেস্ট করেন — কোড, CSV, লগ, JSON, একটি ইমেইল — কোনো ডকুমেন্ট, অ্যাকাউন্ট বা অ্যাপের দরকার ছাড়াই। এটি সেই এডিটরদের অভাব থাকা ক্ষমতা যোগ করে: ক্যাপচার গ্রুপসহ পূর্ণ জাভাস্ক্রিপ্ট রেজেক্স, এবং ক্রমে চলা অর্ডারড ব্যাচ নিয়ম। Word-এর ওয়াইল্ডকার্ড সার্চ শক্তিশালী কিন্তু স্ট্যান্ডার্ড রেজেক্স থেকে ভিন্ন সিনট্যাক্স। Google Docs ২০১৯-এ রেজেক্স সাপোর্ট যোগ করেছে কিন্তু পরিবর্তনে ক্যাপচার গ্রুপ সমর্থন করে না। কোনোটিই আপনাকে এক ক্লিকে প্রয়োগ করার জন্য বেশ কিছু পরিবর্তন সারিবদ্ধ করতে দেয় না।

একাধিক লাইন জুড়ে কীভাবে খুঁজে পরিবর্তন করব?

Regex মোডে, একটি সাধারণ ডট (.) লাইন ব্রেক মেলায় না। . কে নিউলাইনও মেলাতে s ফ্ল্যাগ চিপ (dotall) চালু করুন — উদাহরণস্বরূপ, <!--.*?--> s ফ্ল্যাগসহ একটি HTML মন্তব্য সরায় যা বেশ কয়েকটি লাইন জুড়ে থাকে। m ফ্ল্যাগ (multiline) পুরো টেক্সটের বদলে প্রতিটি লাইনের শুরু ও শেষ মেলায় ^ এবং $ কে, যা প্রতিটি লাইনে একটি প্রেফিক্স যোগ করার জন্য কাজে আসে। উভয় আচরণ দরকার এমন প্যাটার্নের জন্য s ও m ফ্ল্যাগ একসাথে ব্যবহার করুন।

একটি শব্দ বা অক্ষর কীভাবে সরাব?

শব্দ বা অক্ষরটি Find বক্সে টাইপ করুন এবং Replace with বক্স খালি রেখে Replace all ক্লিক করুন — প্রতিটি ম্যাচ মুছে যায়। সেই নোটটি সবখান থেকে সরাতে ' (draft)' খুঁজে কিছু না দিয়ে পরিবর্তন করুন। অতিরিক্ত স্পেসের রান একটি একক স্পেসে ভাঁজ করতে Regex চালু করুন এবং \\s{2,} ব্যবহার করুন। একটি শব্দ শুধু আলাদাভাবে দেখা গেলে সরাতে, লম্বা শব্দের অংশ হিসেবে নয়, Regex মোডে \\bword\\b (Whole word-এর সমতুল্য) ব্যবহার করুন।

কোন রেজেক্স ফ্ল্যাগ সমর্থিত?

চারটি ফ্ল্যাগ: g (global) সবসময় চালু থাকে যাতে প্রতিটি ম্যাচ পরিবর্তিত হয়; i ম্যাচিং কেস-ইনসেনসিটিভ করে; m (multiline) প্রতিটি লাইন মেলায় ^ এবং $ কে; s (dotall) . কে লাইন ব্রেকও মেলায়। Regex মোডে i, m ও s চিপ টগল করে একসাথে মেলান — উদাহরণস্বরূপ i + m প্রতিটি লাইনের শুরুতে ^ দিয়ে কেস-ইনসেনসিটিভ ম্যাচ অ্যাঙ্কর করতে দেয়। জাভাস্ক্রিপ্ট রেজেক্স কিছু অন্যান্য রেজেক্স ইঞ্জিনে পাওয়া x (verbose) বা e (eval) ফ্ল্যাগ সমর্থন করে না।

আমার রেগুলার এক্সপ্রেশন কেন মেলাচ্ছে না?

সবচেয়ে সাধারণ কারণ একটি আনএস্কেপড স্পেশাল ক্যারেক্টার। . * + ? ( ) [ ] { } | ^ $ এবং \\-এর মতো অক্ষরের রেজেক্সে বিশেষ অর্থ আছে, তাই একটি লিটারাল ডট মেলাতে আপনাকে \\. লিখতে হবে — প্যাটার্ন example.com আসলে 'exampleXcom'-কেও মেলায়। প্যাটার্নটি অবৈধ হলে, কন্ট্রোলের নিচে একটি এরর মেসেজ দেখা যায়। যেমন টাইপ করা হয়েছে ঠিক তাই খুঁজতে Regex বন্ধ করুন। আরেকটি সাধারণ সমস্যা: গ্লোবাল ফ্ল্যাগ ভুলে যাওয়া, কিন্তু এখানে g সবসময় চালু, তাই এটি আপনার জন্য সামলে রাখা হয়েছে।

আমি কি একটি পরিবর্তন আনডু করতে পারি?

হ্যাঁ। যেকোনো Replace all, Replace next বা Apply rules-এর পর, টেক্সটকে তার আগের অবস্থায় ফিরিয়ে নিতে Undo ক্লিক করুন — টুলটি একটি হিস্ট্রি রাখে যাতে আপনি বেশ কয়েকটি পরিবর্তনের মধ্য দিয়ে পিছনে যেতে পারেন। এডিটর খালি করে আবার শুরু করতে আপনি Clear-ও ক্লিক করতে পারেন। ভিজিট জুড়ে আপনার অপশন সেটিংস ছাড়া কিছুই সংরক্ষিত হয় না, তাই ট্যাব বন্ধ করলে আপনার টেক্সট চলে যায় (যার মানে কোনো প্রাইভেসি উদ্বেগও নেই)।

এটি কি আইফোন ও অ্যান্ড্রয়েডে কাজ করে?

হ্যাঁ। টুলটি আপনার ব্রাউজারে চলে, তাই আধুনিক ব্রাউজারসহ যেকোনো ডিভাইস — iOS Safari, Chrome for Android, Samsung Internet — ঠিকঠাক কাজ করে। আপনার ক্লিপবোর্ড থেকে টেক্সট পেস্ট করুন, আপনার ফাইন্ড ও রিপ্লেস টার্ম লিখুন, এবং Replace all ট্যাপ করুন। লেআউট ছোট স্ক্রিনের সাথে খাপ খায়। এটি কাজে আসে যখন আপনি ফোনে আছেন এবং কোনো ইমেইল, মেসেজ বা ডকুমেন্ট অ্যাপে পেস্ট করার আগে টেক্সট পরিষ্কার করতে হয়, ল্যাপটপ ছাড়াই।

নতুন

লাইন টুল

ডুপ্লিকেট লাইন মুছুন, সাজান, ট্রিম, উল্টে দিন, এলোমেলো করুন ও টেক্সট লাইন নম্বর দিন।

টেক্সট ও লেখা
নতুন

শব্দ ফ্রিকোয়েন্সি কাউন্টার

stop-word ফিল্টারিং ও CSV এক্সপোর্ট সহ শব্দ ও বাক্যাংশের ফ্রিকোয়েন্সি গণনা করুন।

টেক্সট ও লেখা
নতুন

টেক্সট ক্লিনার

টেক্সট থেকে অতিরিক্ত স্পেস, লাইন ব্রেক, HTML ও স্মার্ট কোট মুছে ফেলুন।

টেক্সট ও লেখা
নতুন

Markdown টেবিল জেনারেটর

একটি এডিটযোগ্য গ্রিডে বা CSV থেকে অ্যালাইনমেন্ট সহ Markdown টেবিল তৈরি করুন।

টেক্সট ও লেখা
নতুন

টেক্সট রিভার্সার

অক্ষর, শব্দ বা লাইন উল্টে দিন, অথবা টেক্সট উল্টোদিকে ফ্লিপ করুন।

টেক্সট ও লেখা
নতুন

টেক্সট থেকে স্পিচ

নির্বাচনযোগ্য ভয়েস, রেট ও পিচ সহ টেক্সট জোরে পড়ুন — আপনার ব্রাউজারে।

টেক্সট ও লেখা