sed
または、他のツールを使用してすべての文字を削除する方法とは別に特定のマルチバイト範囲?
たとえば、この範囲には\xd8\xa0 - \xd9\x8a
UTF-8でエンコードされたアラビア語の文字が含まれます。以下はsedを使った素朴だが希望的な試みです。
$ echo "Peace be upon you. السلام عليكم. שלום עליכם. Paz sobre vosotros." | sed -n -e 's|[^\xd8\xa0-\xd9\x8a]||p'
sed: -e expression #1, char 25: Invalid range end
マルチバイト文字を理解すると、sed
次の文字列が残ります。
السلام عليكم
私はiconv
アラビア語固有のエンコーディングに変換を使用し、それを使用してsed
から再変換することを考えました。しかし、私がやっていることは簡単ではありません。たとえば、アラビア語とヘブライ語を維持したい場合があるので、可能であれば常にすべてをUTF-8に維持したいと思います。
sed
マルチバイト文字が利用できない場合は、何を使うべきですか?私はsed
解決策を探していましたが、perl
運がありませんでした。
UTF-8
私は質問にラベルを追加しようとしましたが、unix.SEはUnicode
ラベルに変更しました。ここにはUnicodeはありません。これはディスクに保存されているエンコードされた文字列です。別々のラベルがあると思いますUTF-8
。
ベストアンサー1
あなたはそれを使用することができますUnicodeプロパティパールでは:
echo "Peace be upon you. السلام عليكم. שלום עליכם. Paz sobre vosotros." \
| perl -CIO -pe 's/\P{Arabic}//g'
-CIO
Perl に入力と出力が UTF-8 でエンコードされていることを伝えます。\P{...}
否定的な属性の一致は\p{...}
肯定的な属性の一致になります。