sed全字搜索和替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed全字搜索和替换相关的知识,希望对你有一定的参考价值。

如何使用sed搜索和替换整个单词?

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

也将取代我不希望它做的[oldtext]的部分比赛。

答案

正则表达式中的 b匹配单词边界(即第一个单词字符和非单词字符之间的位置):

$ echo "bar embarassment" | sed "s/bar/no bar/g"
no bar embarassment
另一答案

在Mac OS X上,这些正则表达式语法都不能在sed中用于匹配整个单词

  • myWord
  • <myWord>

现在听我说,相信我,这个丑陋的语法是你需要使用的:

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

因此,例如,仅用整个单词替换薄荷:

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

资料来源:re_format man page

另一答案

使用作为单词边界:

sed -i 's/oldtext/newtext/g' <file>
另一答案

在我的一台机器中,用“”(没有引号)分隔单词不起作用。解决方案是使用“<”来开始分隔符,使用“>”来结束分隔符。

Joakim Lundberg的例子来解释:

$ echo "bar embarassment" | sed "s/<bar>/no bar/g"
no bar embarassment
另一答案

在shell命令中:

echo "bar embarassment" | sed "s/bar/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

以上是关于sed全字搜索和替换的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有正则表达式的情况下在 C++ 中实现有效的全字字符串替换?

如何在 sed 和 awk(和 perl)中搜索和替换任意文字字符串

不区分大小写的搜索和替换为 sed

存在点和下划线时使用 sed 搜索和替换

使用 grep 和 sed 在 shell 中查找和替换同一文件中的多行

CSV 文件中的 Sed 搜索和替换插入回车