Answers:
正则表达式中的\ b匹配单词边界(即第一个单词字符和非单词字符之间的位置):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
\band\b节省了一天:)
在Mac OS X上,这两种正则表达式语法都不能在sed内用于匹配整个单词
\bmyWord\b\<myWord\>现在听我说,以后再相信我,这个丑陋的语法就是您需要使用的语法:
/[[:<:]]myWord[[:>:]]/因此,例如,仅在整个单词中用minty替换mint:
sed "s/[[:<:]]mint[[:>:]]/minty/g"资料来源:re_format手册页
sed通过MacPorts或Homebrew 安装GNU (以及其他所有GNU工具),并确保它排在您的首位PATH。使Mac相当有用是可能的。
brew install coreutils,它是所有gnu工具的前缀。
brew install gnu-sed使用gsed
perl -pe 's|\bone\b|two|g'。sed在这里和那里失败时稳定工作。
使用\bword边界:
sed -i 's/\boldtext\b/newtext/g' <file>
[]:o,l-> [newtext],[newtext]。您显然是说 sed -i 's/\boldtext\b/newtext/g'
在我的一台机器上,用“ \b”(不带引号)分隔单词不起作用。解决方案是使用“ \<”作为开始定界符,并使用“ \>”作为结束定界符。
用Joakim Lundberg的示例进行解释:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
$ 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 -Egives no bar embarassment$。