ファイル(この場合はeximメールログ)からデータを取り出して、\ NNNのようなエスケープされた8進数のシーケンスに保存します。値0-7。これは、主語が非ラテン文字(アラビア語など)で書かれている場合に主に発生します。Unix - パイプ経由で8進数のエスケープシーケンスを変換する方法
私の目標は、utf-8対応ターミナルでこれらの8進文字を正しく表示するための最もクリーンな方法を見つけることです。特に、出力の可能性が高いため「less」です。
arbitrary_stream | { while read -r temp; do printf %b "$temp\n"; done } | less
これはかなりうまく動作しているようですが、私はそこにいくつかの翻訳ツールである、または多分フラグが少ない」に組み込まれていることを前提となり、次のように
私がこれまでに発見した最善のアプローチです'これを処理する。また、sedのようなものを各\の後に0を挿入すると、変数として保存してから 'echo -e $ data'を使うことができますが、これは以前の解決法よりも面倒です。
テストケース:
octalvar="\342\202\254"
以下で予想される出力:
€
私はどちらかの形で私の上記の解決策よりもちょうど良く、クリーナーより完全か何かを探しています:
echo $octalvar | do_something | less
または
echo $octalvar | less --some_magic_flag
何か提案がありますか?それとも私のソリューションは、私が期待できるほどクリーンであるか?
すべての文字は8進形式ですか? – 123
いいえ、それは普通のテキストとエスケープされた8進数の組み合わせです – user1869743
あなたの解決策はあなたが得ようとしている最高のものです、少ないものは8進数をASCIIに変換するフラグを持っていません。おそらく 'IFS = read -r temp'の間にスペースを保存するように変更してください。 – 123