Dies ersetzt '
bei Wortanfängen:
$ 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
Für Menschen, nicht für Computer, gibt es hier eine Besonderheit: Der Computer zählt space's
als zwei Wörter und ersetzt das, '
weil es am Anfang des zweiten Wortes steht.
Diskussion
\b
markiert eine Wortgrenze, entweder Anfang oder Ende. Nun überlegen Sie \b'
. Dies entspricht einer Wortgrenze, gefolgt von a '
. Da '
es sich nicht um ein Wortzeichen handelt, bedeutet dies, dass das Ende des Wortes vor dem '
übereinstimmenden Wort stehen muss . Um die \b
Übereinstimmung am Anfang von Wörtern zu verwenden, kehren Sie die Reihenfolge um : '\b
. Da '
es sich nicht um ein Wortzeichen handelt, stimmt dies nur überein, wenn ein Wort dem folgt '
.
Einige Seds, wie GNU sed, unterstützen es \<
, dem Wortanfang zu entsprechen. Dies hilft in Ihrem Fall nicht weiter, da '
es sich bereits nicht um ein Wortzeichen handelt und dies das Problem erzwingt.
Was tun gegen "Weltraum"?
Wenn Sie nicht möchten, dass das '
ersetzt wird, space's
weil das '
am Ende eines Wortes angezeigt wird, können Sie die Logik umkehren, indem Sie Folgendes verwenden \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
stimmt an keiner Wortgrenze überein . Somit \B'
passt in '
(Raum-Zitat) , weil weder Raum noch Zitat sind Wortzeichen. Es stimmt nicht überein, space'
weil e'
es eine Wortgrenze ist: e
ist ein Wortzeichen und '
ist es nicht.