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 é.