sed全字搜索和替换

ksu*_*lta 107 shell sed

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

sed -i 's/[oldtext]/[newtext]/g' <file> 
Run Code Online (Sandbox Code Playgroud)

也将替换[oldtext]我不希望它做的部分匹配.

Joa*_*org 153

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

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Run Code Online (Sandbox Code Playgroud)

  • [not posix](http://sed.js.org/?gist=0d0377fffd0f8b21886ff288bc260423)| [GNU sed](http://sed.js.org/?gist=3c69aaff8facf8040a7c9556e80f0868)好的 (8认同)
  • 显然'没有尴尬'.聪明的示例文本;) (7认同)

Lar*_*ndt 130

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

  • \bmyWord\b
  • \<myWord\>

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

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

因此,例如,更换薄荷薄荷的全字:

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

来源:re_format手册页

  • 只需通过MacPorts或Homebrew安装GNU`sed'(和其他所有GNU工具),并确保它首先出现在你的`PATH`中.有可能使Mac非常实用. (18认同)
  • `brew install gnu-sed`使用`gsed` (15认同)
  • @JimStewart打破一系列工具的好方法,这些工具假设'在OS X上,作为OS Xers.' 也就是说,我绝对可以建议`brew install coreutils`,它是所有gnu工具的前缀. (8认同)
  • 使用perl总是一个更好的解决方案:`perl -pe's | \ bone \ b | two | g'`。sed在这里和那里失败时稳定工作。 (2认同)

Mit*_*eat 13

使用\bword边界:

sed -i 's/\boldtext\b/newtext/g' <file>
Run Code Online (Sandbox Code Playgroud)

  • 小心`[]`:`o,l` - >`[newtext],[newtext]`.你显然意味着`sed -i'/\boldtext\b/newtext/g'` (3认同)

Aru*_*run 7

在我的一台机器中,用" \b"(没有引号)分隔单词不起作用.解决方案是使用" \<"作为起始分隔符,使用" \>"作为结束分隔符.

Joakim Lundberg的例子来解释:

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
Run Code Online (Sandbox Code Playgroud)