2

アラビア文字とその他の文字(句読点、数字、英語の文字など)を含むテキストファイルがあります。アラビア語以外のファイル内のすべての文字を削除するようにsedに指示するにはどうすればよいですか?要するに、私たちは通常、sedに特定の文字を削除/置換して他の文字を印刷するように指示していると言えますが、今はsedに目的の文字を印刷して、他のすべての文字を削除するように指示する方法を探しています。

4

1 に答える 1

2

GNU sed では、16 進コードで文字を指定できるはずです。これらは文字クラスで使用できます。

sed 's/[\x00-\x7F]//g' # hex notation
sed 's/[\o000-\o177]//g' # octal notation

tr次のコマンドでも同じ効果が得られるはずです。

tr -d '[\000-\177]'

どちらの方法も、入力ファイルの UTF8 エンコーディングを前提としています。マルチバイト文字には最上位ビットが設定されているため、標準の ASCII (7 ビット) 文字をすべて単純に取り除くことができます。


一部の明確に定義された文字を除くすべてを保持するには、負の文字クラスを使用します。

sed 's/[^characters you want to keep]//g'

同様のパターンを使用する[^…]\+と、正規表現のパフォーマンスが向上する場合があります。

于 2012-09-08T09:59:14.297 に答える