0

改行なしスペース、改行なしハイフンなどの特殊文字を含むドキュメントがあります。この文書を正規化し、これらの特殊文字をスペースに置き換えたいと考えています。また、このドキュメントの内容はさまざまなリソースから収集されているため、さまざまな形式の「イェー」(ی) が含まれており、それらを正規化したいと考えています。

sedコマンドを使用してドキュメント内の Unicode 文字を見つけて置き換えることは可能ですか? 文字の表面形状の代わりに Unicode コードを使用できますか? たとえば、sed コマンドで改行なしスペースの代わりに x00a0 を使用できますか? どのように?


説明が悪くてすみません。ドキュメントが UTF8 でエンコードされており、英語以外の文字が含まれています。たとえば、アラビア語の文書、ウルドゥー語の文書、ペルシア語 (ペルシア語) の文書があります。これらのファイルの一部の文字を別の文字に置き換えたいと思います。正規化するということは、「イェ」のすべての形を 1 つの形に置き換えたいということです。(ご存じかもしれませんが、アラビア語で使用されるこの文字には多くの形式がありますが、単純化といくつかの処理上の問題のために、これらすべての形式を統一したいと考えています。

4

2 に答える 2

1

UTF-8 ファイルを処理するには、各文字を最初から最後まで解析する必要があります。効率的に行う必要がある場合は、ソリューションをスクリプト化するのではなく、実際のプログラムを作成する必要があります。

スクリプトを作成するだけの場合は、UTF-16 に変換してから文字を処理する方が簡単です。

かなり非効率的な方法は次のとおりです。

#!/bin/bash
function px {
 local a="$@"
 local i=0
 while [ $i -lt ${#a}  ]
  do
   printf \\x${a:$i:2}
   i=$(($i+2))
  done
}
(iconv -f UTF8 -t UTF16 | od -x |  cut -b 9- | xargs -n 1) |
if read utf16header
then
 px $utf16header
 out=''
 while read line
  do
   if [ "$line" == "000a" ]
    then
     out=$out$line
     px $out
     out=''
    else
     # put your coversion logic here.
     # e.g
     # if [ "$line" == "0031" ] ;  then
     #    line="0041"
     # fi
     out=$out$line
   fi
  done
fi | iconv -f UTF16 -t UTF8
于 2012-06-30T20:06:46.390 に答える
0

これはうまくいくかもしれません(GNU sed):

echo abcd | sed 'p;y/\x61\x62\x63/ABC/'
abcd
ABCd
于 2012-06-30T08:28:55.167 に答える