অ্যান্ড্রয়েড

ফাইলগুলিতে স্ট্রিং সন্ধান এবং প্রতিস্থাপনের জন্য কীভাবে সেড ব্যবহার করবেন

খুঁজুন এবং পাইথন ব্যবহার একাধিক ফাইল মধ্যে Strings প্রতিস্থাপন

খুঁজুন এবং পাইথন ব্যবহার একাধিক ফাইল মধ্যে Strings প্রতিস্থাপন

সুচিপত্র:

Anonim

বেশিরভাগ ক্ষেত্রে পাঠ্য ফাইলগুলির সাথে কাজ করার সময় আপনাকে এক বা একাধিক ফাইলে পাঠ্যের স্ট্রিংগুলি সন্ধান এবং প্রতিস্থাপন করতে হবে।

সেড একটি এস ট্রাম এড ইটোর। এটি পাইপলাইনগুলির মতো ফাইল এবং ইনপুট স্ট্রিমগুলিতে বেসিক পাঠ্য ম্যানিপুলেশন সম্পাদন করতে পারে। sed আপনি শব্দ এবং লাইনগুলি সন্ধান, অনুসন্ধান এবং প্রতিস্থাপন, সন্নিবেশ এবং মুছতে পারেন। এটি মৌলিক এবং বর্ধিত নিয়মিত প্রকাশকে সমর্থন করে যা আপনাকে জটিল নিদর্শনগুলির সাথে মেলানোর অনুমতি দেয়।

, আমরা sed দিয়ে স্ট্রিংগুলি কীভাবে সন্ধান করতে এবং প্রতিস্থাপন করব সে সম্পর্কে কথা বলব। আমরা আপনাকে কীভাবে পুনরাবৃত্ত অনুসন্ধান করতে হবে এবং প্রতিস্থাপন করব তাও দেখাব।

sed দিয়ে স্ট্রিং সন্ধান করুন এবং প্রতিস্থাপন করুন

sed বেশ কয়েকটি সংস্করণ রয়েছে যার মধ্যে কিছু কার্যকরী পার্থক্য রয়েছে। ম্যাকোস বিএসডি সংস্করণ ব্যবহার করে এবং বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনগুলি জিএনইউ sed সাথে পূর্বনির্ধারিতভাবে ইনস্টল হয়। আমরা জিএনইউ সংস্করণ ব্যবহার করব।

sed ব্যবহার করে পাঠ্য প্রতিস্থাপন এবং প্রতিস্থাপনের সাধারণ ফর্মটি নিম্নলিখিত ফর্মটি গ্রহণ করে:

sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE

  • -i - ডিফল্টরূপে sed তার আউটপুটটিকে স্ট্যান্ডার্ড আউটপুটে লিখে দেয়। এই বিকল্পটি sed জায়গায় ফাইলগুলি সম্পাদনা করতে বলে। যদি কোনও এক্সটেনশান সরবরাহ করা হয় (ex-i.bak) মূল ফাইলের একটি ব্যাকআপ তৈরি হবে। s - বিকল্প কমান্ড, সম্ভবত সেডের মধ্যে সর্বাধিক ব্যবহৃত কমান্ড। / / / - ডেলিমিটার চরিত্র। এটি যে কোনও অক্ষর হতে পারে তবে সাধারণত স্ল্যাশ ( / ) অক্ষর ব্যবহৃত হয়। SEARCH_REGEX - সাধারণ স্ট্রিং বা অনুসন্ধানের জন্য একটি নিয়মিত অভিব্যক্তি। প্রতিস্থাপন - প্রতিস্থাপন স্ট্রিং। g - বিশ্বব্যাপী প্রতিস্থাপন পতাকা। ডিফল্টরূপে, SEARCH_REGEX ফাইল লাইনটি লাইন পড়ে এবং একটি লাইনে কেবল SEARCH_REGEX এর প্রথম উপস্থিতি পরিবর্তন করে। প্রতিস্থাপন পতাকা প্রদান করা হলে, সমস্ত উপস্থিতি প্রতিস্থাপন করা হবে। INPUTFILE - আপনি যে ফাইলটি কমান্ডটি চালাতে চান তার নাম।

আর্গুমেন্টের চারপাশে উদ্ধৃতিগুলি রাখা ভাল অভ্যাস যাতে শেল মেটা-অক্ষরগুলি প্রসারিত হয় না।

আসুন sed কমান্ডটি কয়েকটি সর্বাধিক ব্যবহৃত বিকল্প এবং পতাকাগুলির সাথে ফাইলগুলিতে সন্ধান এবং প্রতিস্থাপনের জন্য কীভাবে ব্যবহার করতে হয় তার উদাহরণগুলি দেখুন।

প্রদর্শনের উদ্দেশ্যে, আমরা নিম্নলিখিত ফাইলটি ব্যবহার করব:

file.txt যাও

123 Foo foo foo foo /bin/bash Ubuntu foobar 456

sed -i 's/foo/linux/' file.txt

123 Foo linux foo linux /bin/bash Ubuntu foobar 456

গ্লোবাল রিপ্লেসমেন্ট ফ্ল্যাগ sed অনুসন্ধানের প্যাটার্নের সমস্ত উপস্থিতি প্রতিস্থাপন করে:

sed -i 's/foo/linux/g' file.txt

123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456

আপনি যেমন খেয়াল করে থাকতে পারেন, পূর্ববর্তী উদাহরণে foobar স্ট্রিংয়ের ভিতরে থাকা স্ট্রিং foobar প্রতিস্থাপন করা হয়। যদি এটি পছন্দসই আচরণ না হয়, সন্ধানের স্ট্রিংয়ের উভয় প্রান্তে শব্দ-সীমানা প্রকাশ ( \b ) ব্যবহার করুন। এটি আংশিক শব্দগুলির সাথে মেলে না তা নিশ্চিত করে।

sed -i 's/\bfoo\b/linux/g' file.txt

123 Foo linux linux linux /bin/bash Ubuntu foobar 456

প্যাটার্ন মিলের কেস সংবেদনশীল করার জন্য, I পতাকাটি ব্যবহার করুন। নীচের উদাহরণে আমরা g এবং I উভয় পতাকা ব্যবহার I :

sed -i 's/foo/linux/gI' file.txt

123 linux linux linux linux /bin/bash Ubuntu linuxbar 456

sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt

আরও সহজ এবং আরও পঠনযোগ্য বিকল্পটি হ'ল আরেকটি ডিলিমিটার অক্ষর ব্যবহার করা। বেশিরভাগ লোক উল্লম্ব বার ( | ) বা কোলন (:) ব্যবহার করে তবে আপনি অন্য কোনও অক্ষর ব্যবহার করতে পারেন:

sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt

123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456

আপনি নিয়মিত এক্সপ্রেশনও ব্যবহার করতে পারেন। উদাহরণস্বরূপ সমস্ত 3 ডিজিটের সংখ্যা অনুসন্ধান করা এবং আপনি যে স্ট্রিং number ব্যবহার করবেন সেগুলি দিয়ে তাদের প্রতিস্থাপন করুন:

sed -i 's/\b\{3}\b/number/g' file.txt

number Foo foo foo foo /bin/bash demo foobar number

শেডের আরেকটি দরকারী বৈশিষ্ট্য হ'ল আপনি অ্যাম্পারস্যান্ড চরিত্রটি ব্যবহার করতে পারেন যা মিলিত প্যাটার্নের সাথে মিলে যায়। চরিত্রটি একাধিকবার ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ, আপনি যদি প্রতিটি 3 ডিজিটের সংখ্যার চারপাশে কোঁকড়ানো ধনুর্বন্ধনী add add যুক্ত করতে চান তবে টাইপ করুন:

sed -i 's/\b\{3}\b/{&}/g' file.txt

{123} Foo foo foo foo /bin/bash demo foobar {456}

সর্বশেষে তবে অন্তত নয়, sed সাহায্যে কোনও ফাইল সম্পাদনা করার সময় ব্যাকআপ তৈরি করা সর্বদা ভাল ধারণা। এটি করতে কেবল -i বিকল্পটিতে এক্সটেনশান সরবরাহ করুন। উদাহরণস্বরূপ, file.txt সম্পাদনা করতে এবং মূল ফাইলটি file.txt.bak হিসাবে সংরক্ষণ করতে আপনি ব্যবহার করবেন:

sed -i.bak 's/foo/linux/g' file.txt

ls

file.txt file.txt.bak

পুনরাবৃত্তি অনুসন্ধান এবং প্রতিস্থাপন

কখনও কখনও আপনি স্ট্রিংযুক্ত ফাইলগুলির জন্য পুনরাবৃত্তভাবে ডিরেক্টরিগুলি অনুসন্ধান করতে এবং সমস্ত ফাইলগুলিতে স্ট্রিং প্রতিস্থাপন করতে চান। ডিরেক্টরিতে পুনরাবৃত্তভাবে ফাইলগুলি সন্ধান করার জন্য ফাইন্ড বা grep জাতীয় কমান্ডগুলি ব্যবহার করে এবং ফাইলের নামগুলি sed পাইপ করে এটি করা যেতে পারে।

নিম্নলিখিত কমান্ডটি চলমান কার্যক্ষম ডিরেক্টরিতে পুনরাবৃত্তভাবে ফাইলগুলি অনুসন্ধান করবে এবং ফাইলের নামগুলি sed প্রেরণ করবে।

find. -type f -exec sed -i 's/foo/bar/g' {} +

ফাইলগুলির নামের সাথে ফাইলগুলির সমস্যাগুলি এড়ানোর জন্য -print0 বিকল্পটি ব্যবহার করুন যা ফাইলটির নাম মুদ্রণ করতে বলে, তার পরে একটি নাল অক্ষর এবং xargs -0 ব্যবহার করে আউটপুটটি পাইপ করে:

find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'

ডিরেক্টরি বাদ দিতে -not -path বিকল্পটি ব্যবহার করুন। উদাহরণস্বরূপ, আপনি যদি বিন্দু ( . ) দিয়ে শুরু হওয়া সমস্ত ফাইল বাদ দিতে আপনার স্থানীয় গিট রেপোতে একটি স্ট্রিং প্রতিস্থাপন করছেন তবে ব্যবহার করুন:

find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'

find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'

অন্য বিকল্পটি হ'ল grep কমান্ডটি অনুসন্ধান প্যাটার্নযুক্ত সমস্ত ফাইল পুনরাবৃত্তভাবে সন্ধান করার জন্য এবং তারপরে ফাইলের নামগুলি পাইপ করতে:

grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'

উপসংহার

যদিও এটি জটিল এবং জটিল বলে মনে হচ্ছে, প্রথমে, sed দিয়ে ফাইলগুলিতে পাঠ্য সন্ধান এবং প্রতিস্থাপন করা খুব সহজ।

সেড কমান্ড, বিকল্প এবং পতাকাগুলি সম্পর্কে আরও জানতে GNU সেড ম্যানুয়াল এবং গ্রাইমায়ার সেড টিউটোরিয়ালটি দেখুন। আপনার যদি কোনও প্রশ্ন বা প্রতিক্রিয়া থাকে তবে নির্দ্বিধায় কোনও মন্তব্য করুন।

সেড টার্মিনাল