3

ファイル 1.htm があります。文字ṣ(下のドット付きのs)を置き換えたい。sed と perl の両方で試しましたが、置き換えられません。

sed -i 's/ṣ/s/g' "1.htm"
perl -i -pe 's/ṣ/s/g' "1.htm"

誰が何をすべきか提案できますか

1.html (ṣを置換しない)

また、私は別の奇妙なものを見つけました。Sed(上記と同じコマンド)は1つのファイルを置き換えますが、他のファイルは置き換えません リンクを配置しています

交換可能.html

unreplaceable.html 1.htmlと同じ

どうしてそうなってしまうのでしょうか。sed は、一方のファイルでは ṣ を置換できますが、もう一方のファイルでは置換できません。

4

2 に答える 2

5

html ファイル内の文字を組み合わせました。つまり、"ṣ"実際には a の"s"後に a " ̣"(a COMBINING DOT BELOW) が続きます。oneliner を修正する 1 つの可能性は次のとおりです。

perl -C -i -pe 's/s\x{0323}/s/g' "1.htm"

つまり、stdout/stdin の utf8 モードをオンにして ( -C)、 の左側に 2 つの文字を明示的に書き込みs///ます。

別の可能性は、次のように、を使用してすべての結合文字を正規化することUnicode::Normalizeです。

perl -C -MUnicode::Normalize -Mutf8 -i -pe '$_=NFKC($_); s/ṣ/s/g' "1.htm"

ただし、これにより、入力ファイル内の他のすべての文字も正規化されますが、これで問題ない場合もあります。

于 2013-10-19T08:24:37.840 に答える