我该如何查找和替换整个单词使用的sed?
干
sed -i 's/[oldtext]/[newtext]/g' <file>
也将取代部分匹配[oldtext]
我不想做的事。
我该如何查找和替换整个单词使用的sed?
干
sed -i 's/[oldtext]/[newtext]/g' <file>
也将取代部分匹配[oldtext]
我不想做的事。
\ b在正则表达式的匹配字边界(即,第一字和字符非文字字符之间的位置):
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
在Mac OS X, 没有这些正则表达式语法里面工作的sed匹配全字
\bmyWord\b
\<myWord\>
现在听我说,后来相信我, 这丑陋的语法是你需要的内容:
/[[:<:]]myWord[[:>:]]/
因此,例如,用薄荷味的全字替换薄荷 :
sed "s/[[:<:]]mint[[:>:]]/minty/g"
来源: 请参阅re_format手册页
使用\b
word边界:
sed -i 's/\boldtext\b/newtext/g' <file>
在我的机器之一,界定与“字\b
”(不带引号),没有工作。 的解决方案是使用“ \<
”用于开始定界符和“ \>
”结束定界符。
与解释乔金-伦德伯格的例子:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
在shell命令:
echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
要么:
echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
但如果你是在vim,你只能使用后:
:% s/\<old\>/new/g
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment