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在这里和那里失败时稳定工作。
使用\b
word边界:
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 -E
gives no bar embarassment$
。