trコマンドは8進数シーケンスでは機能しません。

trコマンドは8進数シーケンスでは機能しません。

ファイルから非ASCII文字を削除する必要があります。私はコマンドを使用しています -

/usr/xpg4/bin/tr -cd '\0-\177' <non-ASCII_file.dat >ASCII_file.dat

過去には働いていましたが、今は動作しません。これで、すべてのアルファベットと非ASCII文字を削除します。 ASCIIファイルに予約されている唯一の文字は、ASCIIセットの数字と特殊文字です。

オペレーティングシステムはSolaris 9です。

この問題の原因は何ですか? 8進数の範囲が誤って解釈されていますか?私の環境に関連していますか?

ベストアンサー1

文字範囲の動作は、ロケール、つまり国際化設定によって異なります。ロケールごとに文字の順序が異なります。たとえば、フランス語のロケール(および文字を含むほとんどのロケールâ)にはafterとbeforeがâあります。ab

Cロケールは、文字がバイトでバイト値に基づいてソートされる言語中立(または選択する必要がある場合はアメリカ英語のみ)のロケールです。

ロケール領域は、文字タイプと文字が定義される順序を定義するtrことに関連しています。 UTF-8がデフォルトの文字セットにますます一般化されているので、文字のバイト数は可変です。LC_CTYPELC_COLLATE

同じ名前の環境変数を使用して指定できます。LC_ALLしかし、それらをすべて覆ってください。したがって、目的の動作を取得するには、LC_ALLをオフにして目的の動作を設定する必要があります。あるいは、より簡単にLC_ALLを設定するだけです。

LC_ALL=C tr -cd '\0-\177'

または:

LC_ALL=C tr -d '\200-\377'

これはUTF-8データにも当てはまります。なぜなら、UTF-8はASCIIの上位セットであり、すべての非ASCII文字はすべてのバイトで8番目のビットが設定されているからです。

おすすめ記事