Isso substitui '
no início das palavras:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/'\b/X/g"
a Xline' a single ' after a Xkeyword' with a few spaceXs for a program
Para humanos, não para computadores, há uma peculiaridade aqui: o computador conta space's
como duas palavras e substitui o '
porque está no início da segunda palavra.
Discussão
\b
marca um limite de palavra, seja começo ou fim. Agora considere \b'
. Isso corresponde a um limite de palavra seguido por um '
. Como '
não é um caractere de palavra, isso significa que o final da palavra deve preceder o '
para corresponder. Para usar \b
para corresponder ao início das palavras, inverta a ordem: '\b
. Novamente, como '
não é um caractere de palavra, isso só será igual se uma palavra seguir o '
.
Alguns seds, como o GNU sed, suportam \<
para corresponder ao início das palavras. Isso não ajuda no seu caso porque '
já não é um caractere de palavra e isso força o problema.
O que fazer com "espaço"
Se você não quiser que '
seja substituído em space's
porque o '
aparece no final de uma palavra, você pode inverter a lógica usando \B
:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/\B'/X/g"
a Xline' a single X after a Xkeyword' with a few space's for a program
\B
corresponde a não um limite de palavras . Assim, \B'
corresponde a '
(espaço-citação) porque nem espaço nem citação são caracteres de palavras. Ele não corresponde a space'
porque e'
é um limite de palavra: e
é um caractere de palavra e '
não é.