如何忽略sed中的单词定界符

How to ignore word delimiters in sed

所以我有一个 bash 脚本,除了 sed 的一个问题外,它运行良好。

full=$(echo $full | sed -e 's/\b'$first'\b/ /' -e 's/  / /g')

除了在变量 $first 前面紧跟一个句点而不是空白 space 的情况外,这会很好用。在那些情况下,我不想删除变量。

示例:

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 忽略点作为分隔符?

您想要 "banana" 前面是字符串开头或 space,然后是 space 或字符串结尾

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

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