
tr -sc 'A-Za-z' '\012'
私は必要なものですが、すべての文字が含まれているわけではありません。フランス語と同じ言語で動作させるにはどうすればよいですか? 「az」に「à」、「é」、「ç」を含める必要があることを「tr」にどのように伝えることができますか?
答え1
原則として:
LC_CTYPE
目的の文字セットとエンコードを記述する変数にロケール変数を設定しますLC_CTYPE=fr_FR.UTF-8
。[:alpha:]
ASCII以外のロケールでは、文字の範囲が明確に定義されておらず(実装とアプリケーションによって異なります)、すべての文字を表すために使用され、範囲がコードポイントに基づくロケールでもすべてのA-Za-z
英数字が列挙されるわけではありませんA
。その後Z
はフランス語にはありませんが、他の言語にはあります(Å
スウェーデン語、チェコ語など)。
したがって、
tr -sc '[:alpha:]' '\012'
ただし、tr
GNU coreutilsの実装を含む多くの実装はマルチバイトエンコーディングをサポートしていません。たとえば、上記のコマンドはLatin-1エンコーディングでは機能しますが、UTF-8では機能しません。代わりに sed を使用できます。
sed 's/[^[:alpha:]][^[:alpha:]]*/_/g'