sed - \b 単語境界を正しく使用するには?

sed - \b 単語境界を正しく使用するには?

単語の先頭の引用符を変更したい。

たとえば、

$ echo "a 'line' a single ' after a  'keyword' with a few space's for a program"\
| sed "s/\b'/X/g"
a 'lineX a single ' after a  'keywordX with a few spaceXs for a program

でもご覧のように交換中です。終わり馬は始まりではありません。
単語の先頭を変えるには?

答え1

これは'単語の先頭を置き換えます。

$ 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

これには人間(コンピュータではない)の特徴があります。コンピュータはこれをspace's2つの単語として認識し、'2番目の単語の先頭にあるのでtheを置き換えます。

議論する

\b開始または終了中の単語の境界を表示します。今考えてみてください\b'。これは次の単語の境界と一致します''だからこそいいえつまり、単語の終わりが'一致するには、単語の前に来なければならないことを意味します。\b単語の先頭を一致させるには、順序を逆にします'\b。繰り返しますが、単語文字ではないので、'後ろに単語がなければ一致しません'

GNU sed などの一部の sed は、\<単語の先頭の一致をサポートしています。'もはや単語文字ではなく、問題が発生するため、これは役に立ちません。

「空間」についてどうすればいいですか?

inが単語の末尾に表示されるため、'置き換えたくない場合は、次のようにロジックを反転できます。space's'\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マッチ単語の境界ではない。したがって、空白や引用符はすべて単語文字ではないため、\B'一致します(空白引用符)。 isは単語の境界なので、'atと一致しません。単語文字ですが、そうではありません。space'e'e'

関連情報