जवाबों:
नियमित अभिव्यक्तियों में \ b शब्द सीमाओं से मेल खाता है (अर्थात पहले शब्द चरित्र और गैर-शब्द चरित्र के बीच का स्थान):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\bदिन बचाया :)
मैक ओएस एक्स पर, न तो इन regex वाक्यविन्यास के अंदर काम sed पूरे शब्द मिलान के लिए
\bmyWord\b\<myWord\>मुझे अभी सुनें और बाद में विश्वास करें, यह बदसूरत सिंटैक्स है जिसे आपको उपयोग करने की आवश्यकता है:
/[[:<:]]myWord[[:>:]]/तो, उदाहरण के लिए, को बदलने के लिए टकसाल के साथ मिन्टी केवल संपूर्ण शब्दों के लिए:
sed "s/[[:<:]]mint[[:>:]]/minty/g"स्रोत: re_format man पेज
sedMacPorts या Homebrew के माध्यम से GNU (और हर दूसरे GNU टूल) को स्थापित करें और सुनिश्चित करें कि यह आपके पहले नंबर पर आता है PATH। मैक को काफी प्रयोग करने योग्य बनाना संभव है।
brew install coreutils, जो सभी ग्नू उपकरण का उपसर्ग करता है।
brew install gnu-sedका उपयोग करने के लिएgsed
perl -pe 's|\bone\b|two|g':। जबकि यहाँ और वहाँ sed विफल रहता है stably काम करता है।
मेरी एक मशीन में, " \b" (बिना उद्धरण के) शब्द के परिसीमन ने काम नहीं किया। समाधान \<परिसीमन शुरू करने के लिए और " \>" परिसीमन समाप्त करने के लिए उपयोग करना था ।
जोकिम लुंडबर्ग के उदाहरण के साथ समझाने के लिए:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
शेल कमांड में:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
या:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
लेकिन अगर आप विम में हैं, तो आप केवल बाद में उपयोग कर सकते हैं:
:% s/\<old\>/new/g
$ 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$।