Por que você está escapando do H e do W?
\H e \W têm significados específicos e são diferentes de H e W .
echo " WHERE x=10" |sed 's/ *WHERE \+/WHERE /g'
Isso funciona
echo " HELLO x=10" |sed 's/ *\HELLO \+/HELLO /g'
remove o espaço contínuo antes de hello e depois da palavra "HELLO"
mas isso não acontece
echo " WHERE x=10" |sed 's/ *\WHERE \+/WHERE /g'
Eu tentei escapar \ w com \ w como abaixo
echo " WHERE x=10" |sed 's/ *\"WHERE" \+/\"WHERE" /g'
mas mesmo isso não está funcionando. O que está errado?
Por que você está escapando do H e do W?
\H e \W têm significados específicos e são diferentes de H e W .
echo " WHERE x=10" |sed 's/ *WHERE \+/WHERE /g'
Basta soltar o \ antes das palavras.
echo " WHERE x=10" |sed 's/ *WHERE \+/WHERE /g'
WHERE x=10
O \ em expressões regulares é usado como um caractere de escape para vários tipos de correspondências.
O \w é usado para localizar um caractere de palavra, ou seja, um caractere de a-z , A-Z , 0-9 , incluindo o caractere _ (sublinhado).
Como uma versão maiúscula nega uma correspondência, seu \W significa que não corresponde a um único caractere, o que obviamente faz a regex falhar para sua string de entrada.
Tente por exemplo:
echo " {HERE x=10" |sed 's/ *\WHERE \+/WHERE /g'
WHERE x=10
funciona porque { é correspondido por \W (como { NÃO é um caractere de palavra)!