পুরো শব্দ অনুসন্ধান এবং প্রতিস্থাপন করুন


120

আমি কীভাবে সম্পূর্ণ শব্দগুলি ব্যবহার করে অনুসন্ধান করব এবং প্রতিস্থাপন করব?

এরকম

sed -i 's/[oldtext]/[newtext]/g' <file> 

[oldtext]আমি এটি করতে চাই না এমন আংশিক ম্যাচগুলিও প্রতিস্থাপন করবে ।

উত্তর:


164

regular বি নিয়মিত প্রকাশে শব্দের সীমানা মেলে (অর্থাত্ প্রথম শব্দের অক্ষর এবং শব্দের অক্ষরের মধ্যে অবস্থান):

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment


@ ওলেগমাজকো আমি ভিএম-তে ব্যবহারের জন্য পিক্স গ্রহণযোগ্য পদ্ধতিটি অনুসন্ধান করতে এসেছি এবং আমার জন্য যা কাজ করেছে তা এস / \ <7 // জি। আমি আমার কোডে একটি শব্দের শুরুতে একটি 7 সরিয়ে দেওয়ার চেষ্টা করছিলাম। এই লিঙ্কটি, বিশেষত, জে.পি. এর সমাধান আমাকে উত্তরটিতে নিয়ে গেছে : স্ট্যাকওভারফ্লো / প্রশ্ন / 3864467/… (কোনও কারণে এটি আপনার মতো এম্বেড করার জন্য মার্কডাউন পেতে পারেনি)।
jimh

ধন্যবাদ "আমি" এবং "তাই \band\bদিনটি বাঁচিয়েছি "
মিচেলকে

144

Mac OS X এর উপর, তন্ন তন্ন এই Regex syntaxes ভেতরে কাজ sed পুরো শব্দ মেলানোর জন্য

  • \bmyWord\b
  • \<myWord\>

এখনই আমাকে শোনো এবং আমাকে বিশ্বাস করুন, এই কুরুচিপূর্ণ বাক্য গঠনটি আপনার ব্যবহার করা উচিত:

  • /[[:<:]]myWord[[:>:]]/

সুতরাং, উদাহরণস্বরূপ, প্রতিস্থাপন করতে পুদিনা সঙ্গে পুদিনার মত শুধুমাত্র পুরো শব্দের জন্য:

  • sed "s/[[:<:]]mint[[:>:]]/minty/g"

সূত্র: পুনরায় ফর্ম্যাট ম্যান পৃষ্ঠা


19
sedম্যাকপোর্টস বা হোমব্রিউয়ের মাধ্যমে কেবল জিএনইউ (এবং অন্যান্য প্রতিটি জিএনইউ সরঞ্জাম) ইনস্টল করুন এবং নিশ্চিত করুন যে এটি আপনার মধ্যে প্রথম আসে PATH। ম্যাককে মোটামুটি ব্যবহারযোগ্য করে তোলা সম্ভব।
জিম স্টুয়ার্ট

9
'জিমস্টেওয়ার্ট দুর্দান্ত সরঞ্জামগুলি ভাঙ্গার দুর্দান্ত উপায় যা ধরে নিয়েছে যে' ওএস এক্স এ যখন ওএস এক্সার্স হিসাবে করুন। ' এটি বলেছিল, আমি অবশ্যই সুপারিশ করতে পারি brew install coreutils, যা সমস্ত gnu সরঞ্জামের উপসর্গ করে।
এলিওটিটিসিবিএল

16
brew install gnu-sedব্যবহার করতেgsed
k107

ব্রিউ কোর্টিলগুলি দুর্দান্ত। অন্যান্য কোনও ব্রু প্যাকেজ রয়েছে যা পুরো গুচ্ছ কমান্ডের ভার্সন সংস্করণ ইনস্টল করে বা বাকীটি আলাদাভাবে ইনস্টল করতে হবে?
কোটকোট

2
Perl ব্যবহার সবসময় ভাল সমাধান পাওয়া যাবে: perl -pe 's|\bone\b|two|g'। এখানে এবং সেখানে ব্যর্থতার সাথে স্থিরভাবে কাজ করে।
পাভেল ভ্লাসভ

13

\bশব্দ সীমানা জন্য ব্যবহার করুন :

sed -i 's/\boldtext\b/newtext/g' <file>

3
এর সাথে সতর্ক থাকুন []: o,l-> [newtext],[newtext]। আপনার স্পষ্টতই বোঝাতে চেয়েছিলেন sed -i 's/\boldtext\b/newtext/g'
জাজোয়া

7

আমার একটি মেশিনে, " \b" (উদ্ধৃতি ব্যতীত) দিয়ে শব্দটি সীমিত করা কার্যকর হয়নি। সমাধানটি হ'ল \<ডিলিমিটার শুরু করার জন্য " " এবং সীমানা \>শেষ করার জন্য " " ব্যবহার করা।

জোয়াকিম লন্ডবার্গের উদাহরণ দিয়ে ব্যাখ্যা করতে :

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment

2

শেল কমান্ডে:

echo "bar embarassment" | sed "s/\bbar\b/no bar/g" 

বা:

echo "bar embarassment" | sed "s/\<bar\>/no bar/g"

তবে আপনি যদি ভিমে থাকেন তবে আপনি কেবল পরে ব্যবহার করতে পারেন:

:% s/\<old\>/new/g

-1
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment

ওপি স্পষ্টভাবে "
সেড

এটি একটি স্প্লিট-ম্যানিপুলেট-জয়েন, খাঁটি প্রতিস্থাপন নয়; এটি একের মধ্যে একাধিক স্পেস ভেঙে যায় এবং কোনও অগ্রণী / চলমান স্থানগুলি ত্যাগ করে: যেমন echo " bar embarassment " | awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1' | cat -Eদেয় no bar embarassment$
মুশিফিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.