「sed」を使用するときに空白以外の文字を保持する方法

「sed」を使用するときに空白以外の文字を保持する方法

sedまっすぐな引用符を丸い引用符に変換する式を使用しています。 「Linuxプログラママニュアル」を「Linuxプログラママニュアル」に変換したいと思います。直線引用符の前後に空白以外の文字があるかどうかを検出するには、この機能が必要です。ある場合は、真の引用符を丸い引用符で置き換えます。私はこれを試しました:

sed "s/\S'\S/’/"

ただし、これにより空白以外の文字も置き換えられます。

Linux programme’ manual

ベストアンサー1

キャプチャ:

sed -e :1 -e "s/\([^[:space:]]\)'\([^[:space:]]\)/\1’\2/g" -e t1

(ここでは[^[:space:]]非標準のPerlに似た代わりに使用されます\S)。

の目的は、以前の交換の一部であるため、交換されていないt1などの入力を上書きすることです。X'Y'Zs/.../.../gY'ZY’ZY

perl(どこから来たのか)を使用している場合は、\Sツアー演算子を使用できます。

perl -pe "s/(?<=\S)'(?=\S)/’/g"

いくつかの実装はwithやast-openのwithsedのようなPerlに似た正規表現をサポートしていますが、これは最も一般的な実装ではなく、使用を推奨するGNU実装ではありません。ssed-Rsed-Psed\S

現在のロケール文字エンコードでU + 2019文字をハードコードする代わりに、次のことができます。

perl -Mopen=locale -pe "s/(?<=\S)'(?=\S)/\x{2019}/g"

または:

perl -Mopen=locale -pe "s/(?<=\S)'(?=\S)/\N{RIGHT SINGLE QUOTATION MARK}/g"

エンコーディングは、スクリプトを呼び出すユーザーのロケールに基づいて'置き換えられます。たとえば、エンコーディングは、ISO8859-7ギリシャ語のシングルバイト文字セットの場合は0xa2バイト、UTF-8の場合は0xe2 0x80 0x99、BIG5、またはBIG5-HKSCSの場合は0xa1 0xa6です。

おすすめ記事