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.