Se você estiver usando o GNU sed (o que você acha que -i sugere), há um " limite de palavras "escape \b :
sed -i "s/\b$SEARCH\b/$REPLACE/g"
\b corresponde exatamente a um limite de palavra: o caractere de um lado é um caractere de "palavra" e o caractere do outro não. É uma correspondência de largura zero, portanto, não é necessário usar subgrupos de captura para manter o valor com e . Há também \B , que é exatamente o oposto.
Se você não estiver usando o GNU sed, poderá usar a alternância com o início e o fim da linha em seus subpadrões de captura: (\W|^) . Isso corresponderá a um caractere não pertencente à palavra ou ao início de uma linha, e (\W|$) corresponderá a um caractere não pertencente à palavra ou ao final de uma linha. Nesse caso, você ainda usa e como estava. Alguns não-GNU sed s suportam \b de qualquer maneira, pelo menos em um modo estendido, então vale a pena dar essa chance independentemente.