ファイルからすべてのソフトハイフン(U + 00AD)を削除する方法

ファイルからすべてのソフトハイフン(U + 00AD)を削除する方法

というものがあります。ソフトハイフン。 Unicodeの値は、U+00ADテキストエディタでは表示できません。

明らかに私のファイルのいくつかがいっぱいです。

$ perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
n­c
U+006E n
U+00AD ­
U+0063 c
U+000A

nとの間にc柔らかいハイフンがあります。このコマンドをコピーするとecho n­c(2つではなく)3つの文字があることがわかります。

ファイルからすべてのソフトハイフン(U + 00AD)を削除するには?

ベストアンサー1

単に使用してsed(GNUでテストしたが、sedGNUではなくsedができるかどうかはわかりません)、文字をsed式にコピー/貼り付けてください。ここでは、コマンドをコピーしecho n­cて実行して、興味のある文字を含むテストファイルを提供するファイルに出力をリダイレクトしました。

$ perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}' file
U+006E n
U+00C2 Â
U+00AD ­
U+0063 c
U+000A 

また、U+00C2 Â私は理解していませんが、Unicodeを知らないので、Unicodeの不思議な点だと思うものを追加します。ファイルは期待どおりに見え、実際には空白のように見えますが、実際にはとの間に滑らかなaハイフンがありますn

$ cat file
n­c

$ od -c file
0000000   n 302 255   c  \n
0000005

とにかく、その明白なスペースをコピー/貼り付けてに入力すると、uniprops次のようになります。

$ uniprops '­'
U+00AD ‹U+00AD› \N{SOFT HYPHEN}
    \pC \p{Cf}
    All Any Assigned C Other Case_Ignorable CI Cf Format Changes_When_NFKC_Casefolded CWKCF Common Zyyy Default_Ignorable_Code_Point DI Graph X_POSIX_Graph
       Latin_1 Latin_1_Supplement Latin_1_Sup InLatin1 Print X_POSIX_Print Unicode

sed代替演算子にコピーすると、次のようになります。

$ sed 's/­//g' file | perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
U+006E n
U+0063 c
U+000A 

つまり、正しく削除されます。したがって、影響を受けるすべてのファイルにこのコマンドを適用できます。

sed -i 's/­//g' file1 file2 ... fileN

まず、いくつかのファイルを試してみて(そして安全なテストのためにOSとsedの実装に基づいてバックアップを使用またはアーカイブしてから)、すべてのファイルに対して実行してください-i.baki .bak

おすすめ記事