SED整词的搜索和替换SED整词的搜索和替换(sed whole word search and r

2019-05-13 16:10发布

我该如何查找和替换整个单词使用的sed?

sed -i 's/[oldtext]/[newtext]/g' <file> 

也将取代部分匹配[oldtext]我不想做的事。

Answer 1:

\ b在正则表达式的匹配字边界(即,第一字和字符非文字字符之间的位置):

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment


Answer 2:

在Mac OS X, 没有这些正则表达式语法里面工作的sed匹配全字

  • \bmyWord\b
  • \<myWord\>

现在听我说,后来相信我, 丑陋的语法是你需要的内容:

  • /[[:<:]]myWord[[:>:]]/

因此,例如,用薄荷味的全字替换薄荷

  • sed "s/[[:<:]]mint[[:>:]]/minty/g"

来源: 请参阅re_format手册页



Answer 3:

使用\b word边界:

sed -i 's/\boldtext\b/newtext/g' <file>


Answer 4:

在我的机器之一,界定与“字\b ”(不带引号),没有工作。 的解决方案是使用“ \< ”用于开始定界符和“ \> ”结束定界符。

与解释乔金-伦德伯格的例子:

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment


Answer 5:

在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


Answer 6:

$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment


文章来源: sed whole word search and replace
标签: shell sed