「script」コマンドを使用して、コマンドラインでインタラクティブセッションを記録できます。ただし、これにはすべての制御文字およびが含まれます カラーコード。 「col-b」を使用して制御文字(バックスペースなど)を削除できますが、カラーコードを削除する簡単な方法が見つかりません。
コマンドラインを通常の方法で使用したいので、そこで色を無効にしたくないことに注意してください。スクリプト出力から色を削除したいだけです。また、いろいろ試して正規表現を見つけて修正することもできますが、もっと簡単な(そしてより信頼性の高い-正規表現を開発するときにわからないコードがある場合はどうなるでしょうか?)ソリューションがあることを望んでいます。
問題を表示するには:
spl62 tmp: script Script started, file is typescript spl62 lepl: ls add-licence.sed build-example.sh commit-test push-docs.sh add-licence.sh build.sh delete-licence.sed setup.py asn build-test.sh delete-licence.sh src build-doc.sh clean doc-src test.ini spl62 lepl: exit Script done, file is typescript spl62 tmp: cat -v typescript Script started on Thu 09 Jun 2011 09:47:27 AM CLT spl62 lepl: ls^M ^[[0m^[[00madd-licence.sed^[[0m ^[[00;32mbuild-example.sh^[[0m ^[[00mcommit-test^[[0m ^[[00;32mpush-docs.sh^[[0m^M ^[[00;32madd-licence.sh^[[0m ^[[00;32mbuild.sh^[[0m ^[[00mdelete-licence.sed^[[0m ^[[00msetup.py^[[0m^M ^[[01;34masn^[[0m ^[[00;32mbuild-test.sh^[[0m ^[[00;32mdelete-licence.sh^[[0m ^[[01;34msrc^[[0m^M ^[[00;32mbuild-doc.sh^[[0m ^[[00;32mclean^[[0m ^[[01;34mdoc-src^[[0m ^[[00mtest.ini^[[0m^M spl62 lepl: exit^M Script done on Thu 09 Jun 2011 09:47:29 AM CLT spl62 tmp: col -b < typescript Script started on Thu 09 Jun 2011 09:47:27 AM CLT spl62 lepl: ls 0m00madd-licence.sed0m 00;32mbuild-example.sh0m 00mcommit-test0m 00;32mpush-docs.sh0m 00;32madd-licence.sh0m 00;32mbuild.sh0m 00mdelete-licence.sed0m 00msetup.py0m 01;34masn0m 00;32mbuild-test.sh0m 00;32mdelete-licence.sh0m 01;34msrc0m 00;32mbuild-doc.sh0m 00;32mclean0m 01;34mdoc-src0m 00mtest.ini0m spl62 lepl: exit Script done on Thu 09 Jun 2011 09:47:29 AM CLT
承認された回答:
次のスクリプトは、(ctlseqsに基づく)のすべてのANSI / VT100/xterm制御シーケンスを除外する必要があります。最小限のテストで、一致不足または一致超過を報告してください。
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ e[ #%()*+-./]. |
e[ [ -?]* [@-~] | # CSI ... Cmd
e] .*? (?:e\|[ax9c]) | # OSC ... (ST|BEL)
e[P^_] .*? (?:e\|x9c) | # (DCS|PM|APC) ... ST
e. //xg;
print;
}
既知の問題:
- 不正な形式のシーケンスについて文句を言うことはありません。それはこのスクリプトの目的ではありません。
- DCS / PM / APC/OSCへの複数行の文字列引数はサポートされていません。
- 128〜159の範囲のバイトは、制御文字として解析される場合がありますが、これはめったに使用されません。これは、非ASCII制御文字を解析するバージョンです(これにより、UTF-8を含む一部のエンコーディングで非ASCIIテキストがマングルされます)。
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ e[ #%()*+-./]. |
(?:e[|x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:e]|x9d) .*? (?:e\|[ax9c]) | # OSC ... (ST|BEL)
(?:e[P^_]|[x90x9ex9f]) .*? (?:e\|x9c) | # (DCS|PM|APC) ... ST
e.|[x80-x9f] //xg;
print;
}