単語の先頭の引用符を変更したい。
たとえば、
$ 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's
2つの単語として認識し、'
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
'