如何忽略sed中的单词分隔符

时间:2015-03-03 17:28:14

标签: regex bash sed

所以我有一个bash脚本,除了sed。

的一个问题外,它的工作正常
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/  / /g')

除非有一些变量$ first紧跟一个句点而不是一个空格,否则这会很有效。在这些情况下,我不希望删除变量。

示例:

full="apple.orange orange.banana apple.banana banana";first="banana"
full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/  / /g')
echo $first $full;

我想只删除整个单词banana,而不是对orange.banana或apple.banana进行任何更改,那么我怎样才能让sed忽略点作为分隔符?

1 个答案:

答案 0 :(得分:2)

你想要" banana"以字符串开头或空格开头,后跟空格或字符串结尾

$ sed -r 's/(^|[[:blank:]])'"$first"'([[:blank:]]|$)/ /g' <<< "$full"
apple.orange orange.banana apple.banana 

注意使用-r选项(对于bsd sed,使用-E)启用扩展正则表达式 - 允许我们省略大量反斜杠。