0

sed を使用してファイルから特定の Unicode 文字 (書記素) を置き換えようとしています。ただし、それらのいくつか、つまりユニコードブロックのものについては失敗し続けています。

\p{InHigh_Surrogates}: U+D800–U+DB7F
\p{InHigh_Private_Use_Surrogates}: U+DB80–U+DBFF
\p{InLow_Surrogates}: U+DC00–U+DFFF

私は試しました(-fスイッチを介してロードされたsed構成ファイルで):

s/\p{InHigh_Surrogates}/###/  --> no effect at all
s/\\p\{InHigh_Surrogates\}/###_D-NON-UTF8_###/ -> error message 'Invalid content of \{\}'

誰か提案がありますか?また、必ずしもブロックの使用に集中しているわけではありませんが、\xd800-\xdfff の形式の文字範囲を定義しようとしても失敗しました。

ありがとう、トーマス

4

1 に答える 1

2

-rsed のフラグを使用してみてください。

$ sed -r 's/\\p\{InHigh_Surrogates\}/###/g' file
###: U+D800–U+DB7F
\p{InHigh_Private_Use_Surrogates}: U+DB80–U+DBFF
\p{InLow_Surrogates}: U+DC00–U+DFFF

からman sed:

-r, --regexp-extended

スクリプトで拡張正規表現を使用します。

于 2014-03-17T09:27:14.540 に答える