ちょっと前に、awkを使ってscriptコマンドで取得するターミナルログにタイムスタンプを付与する(Teratermとかのログみたいにする)処理について記述したことがあったのだが、この状態だとバックスペースなどの制御文字やカラーコードが残っている状態になってしまう。 catなどで見る分には問題ないのだが、lessなどで確認するにはちょっとよろしくないよねということで、そういった制御文字やカラーコードを記録中に削除してしまうことにする。
で、よく制御文字を削除する方法としてはcolコマンドが用いられるのだが、この方法だとファイルを読み込んで削除はできても追記での削除はできないようだ。 なので、ちょっと汚いけどtrやsedで削除していく。
script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | tr -d '\000-\011\013\014\016-\037]0;' >> test_$(date +%Y%m%d_%H%M%S).log)
これで、記録されるログからは制御文字やカラーコードが削除されているはずだ。 …ただ、バックスペースとか上下キーでのhistory選択を行った際の特殊文字も全部消えてるので、これだと実行したコマンドが結局何だったのかが読みにくいかも。 vimでファイル編集した際の内容がうまいこと記録されるのは良いけど、使いどころ次第だろうか。