13

カラーコードを含むファイルがあります:

Fri May 25 17:13:04 2012: [....] Starting MTA: exim4^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0c.
Fri May 25 17:13:05 2012: [....] Loading cpufreq kernel  modules...^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0cdone (acpi-cpufreq).

Linux端末で色付けして表示するにはどうすればよいですか?

4

4 に答える 4

14

完全を期すために、これらすべてのエスケープ シーケンスを含むファイルはbootlogdデーモン (debian ファミリの bootlog パッケージ) によって生成されます。このデーモンは、起動中にコンソールに送信されるすべての色分けされたメッセージをキャプチャします。コンソールでは、これらのメッセージは最初に次の行のように表示されます。

[....] Starting periodic command scheduler: cron

次に、サービスまたはコマンドが実行されると、エスケープ シーケンスがコンソールに送信され、カーソルが行の先頭に再配置され、ok、fail、info、warnなどが出力されます。

[ ok ] Starting periodic command scheduler: cron.

これらのメッセージはすべてbootlogdデーモンによってキャプチャされ、再配置を含むすべてのエスケープ シーケンスとともにファイルに書き込まれます。ファイルを正しく表示するには、^[を 8 進数に置き換える必要があることを除けば問題ありません。033ただし、キャッチがあるため、デーモンは、カーソルの再配置シーケンスの座標を変更せずに、メッセージの前に日付スタンプも追加します。その結果、okfailなどのメッセージによって、日付スタンプの一部が上書きされます。よくない。

Fri May 25 17:13:01 2012: [....] Starting periodic command scheduler: cron
becomes...
[ ok ay 25 17:13:01 2012: [....] Starting periodic command scheduler: cron.

解決策は、カーソルの配置順序を変更することです。試行錯誤の結果、そのシーケンスは であることがわかりました^[1G。次の sed コマンドは、最終的にジョブを完了します。

sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot

bootlogdデーモンは、コンソール メッセージをファイルに送信する前に、すべてのエスケープ シーケンスを消去する必要があります。これをバグと呼んでもいいですか?

この「バグ」は、Ubuntu、Mint などのすべての Debian 継承者にも存在する可能性があります...

于 2012-05-26T06:52:57.767 に答える
5

したがって、ripatの答えはうまくいきませんでした。Debian wiki - https://wiki.debian.org/bootlogdで代替案を見つけました。

執筆時点では、これは次のとおりです。

sed $'s/\^\[/\E/g' /var/log/boot

bootlogd バージョン <2.88 (日付スタンプなし)。それ以降のバージョンの場合:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot

後者は、私のログの 1 行を除くすべてを完全にフォーマットしますが、わずかな矛盾があります。また、この問題のバグ レポートで指摘されているよう$に、sed パターンをリードすることで、これらのソリューションが bash 固有のものになることにも注意してください。

于 2013-09-25T17:09:34.307 に答える