How do I search and replace whole words using sed?
Doing
sed -i 's/[oldtext]/[newtext]/g' <file>
will also replace partial matches of [oldtext]
which I don't want it to do.
How do I search and replace whole words using sed?
Doing
sed -i 's/[oldtext]/[newtext]/g' <file>
will also replace partial matches of [oldtext]
which I don't want it to do.
In one of my machine, delimiting the word with "
\b
" (without the quotes) did not work. The solution was to use "\<
" for starting delimiter and "\>
" for ending delimiter.To explain with Joakim Lundberg's example:
\b in regular expressions match word boundaries (i.e. the location between the first word character and non-word character):
in shell command:
or:
but if you are in vim, you can only use the later:
On Mac OS X, neither of these regex syntaxes work inside sed for matching whole words
\bmyWord\b
\<myWord\>
Hear me now and believe me later, this ugly syntax is what you need to use:
/[[:<:]]myWord[[:>:]]/
So, for example, to replace mint with minty for whole words only:
sed "s/[[:<:]]mint[[:>:]]/minty/g"
Source: re_format man page
Use
\b
for word boundaries: