Saya dapat menggunakan perintah "skrip" untuk merekam sesi interaktif di baris perintah. Namun, ini termasuk semua karakter kontrol dan kode warna. Saya dapat menghapus karakter kontrol (seperti backspace) dengan "col -b", tetapi saya tidak dapat menemukan cara sederhana untuk menghapus kode warna.
Perhatikan bahwa saya ingin menggunakan baris perintah dengan cara biasa, jadi jangan ingin menonaktifkan warna di sana - Saya hanya ingin menghapusnya dari output skrip. Juga, saya tahu bisa bermain-main dan mencoba menemukan regexp untuk memperbaiki, tetapi saya berharap ada yang lebih sederhana (dan lebih dapat diandalkan - bagaimana jika ada kode yang saya tidak tahu ketika saya mengembangkan solusi regexp?).
Untuk menunjukkan masalah:
spl62 tmp: skrip Script dimulai, file adalah naskah 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: keluar Script selesai, file adalah naskah spl62 tmp: skrip kucing -v Script dimulai pada Kamis 09 Jun 2011 09:47:27 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: keluar ^ M Script dilakukan pada Kamis 09 Jun 2011 09:47:29 CLT spl62 tmp: col -b <naskah naskah Script dimulai pada Kamis 09 Jun 2011 09:47:27 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: keluar Script dilakukan pada Kamis 09 Jun 2011 09:47:29 CLT
sumber
Memperbarui jawaban Gilles untuk juga menghapus carriage returns dan melakukan backspace-delete karakter sebelumnya, yang keduanya penting bagi saya untuk naskah yang dihasilkan di Cygwin:
sumber
Saya akan menggunakan
sed
dalam kasus ini.melakukan:
cat -v typescript | sed -e "s/\x1b\[.\{1,5\}m//g"
sed -e "s / search / replace / g" adalah hal standar. regex dijelaskan sebagai berikut:
\x1b
cocok dengan Escape sebelum kode warna\[
cocok dengan braket terbuka pertama.\{1,5\}
cocok dengan 1 hingga 5 karakter tunggal. Harus\
kurung kurawal untuk menjaga cangkang dari mangling mereka.m
karakter terakhir di regex - biasanya mengikuti kode warna.//
string kosong untuk apa mengganti segalanya.g
cocokkan beberapa kali per baris.sumber
foo\e[1m(1m = {
menjadifoo = {
bukanfoo(m = {
), menggantikan.
dengan[0-9;]
lebih akurat..\{1,5\}
dengan[^m]\{1,5\}
untuk itu - tetapi juga perhatikan bahwa ini masih hanya menghapus kode "rendisi grafis" (yang berakhiran denganm
) - pada dasarnya warna, terbalik, tebal dan miring (jika ada).\x1b(B
(termasuk dalam keluaran warna karat)\x1b
dan tidak\033
?\u001b
bukan\x1b
sumber
=> Bagaimana cara menggunakan:
diuji pada: - AIX 5.x / 6.1 / 7.1 - Linux Mandrake / Mandriva / SLES / Fedora - SunOS
sumber
Saya memecahkan masalah dengan menjalankan
scriptreplay
di layar dan membuang buffer scrollback ke file.Skrip harapan berikut melakukan ini untuk Anda.
Ini telah diuji untuk file log dengan hingga 250.000 baris. Di direktori kerja Anda memerlukan skrip, file bernama "waktu" dengan 10.000.000 kali baris "1 10" di dalamnya, dan skrip. Saya membutuhkan nama scriptfile Anda sebagai argumen baris perintah, seperti
./name_of_script name_of_scriptlog
.File waktu dapat dibuat oleh
sumber
delay
blocksize
", jadi tidak ada alasan untuk tidak membuatnya "0
<entirefile>
" dan membuang semuanya tanpa penundaan. Anda dapat melakukannya dengan mengambil ukuran skrip minus baris pertama (tail -n +2 typescript|wc -c
), dan membuat file timing denganecho "0 "`tail -n +2 typescript|wc -c` > timing
. Itu pada dasarnya akan instan, danscriptreplay
akan memutar ulang seluruh skrip dengan kecepatan secepat mungkin.Menemukan pertanyaan ini sambil mencari solusi untuk masalah yang sama. Sedikit lagi menggali dan menemukan skrip ini di Live Journal di tautan ini. Saya bekerja dengan sempurna untuk saya. Ini juga merupakan tulisan yang sangat bagus tentang masalah ini dan bagaimana solusinya bekerja. Pasti layak dibaca. http://jdimpson.livejournal.com/7040.html
sumber
Saya lebih suka menggunakan alat khusus untuk mengubah output skrip menjadi teks biasa, yang secara konstan didukung dan diuji dengan baik, melalui custom regexp. Jadi ini berhasil bagi saya:
perintah skrip menangkap ke dalam file skrip ansi2txt - mengubah kode ansi dengan lolos seperti colorcodes, backspaces dll menjadi teks biasa, namun saya menemukan bahwa beberapa lolos masih tersisa. col -bp - menghapusnya sepenuhnya.
Saya sudah menguji ini pada disko Ubuntu terbaru, dan itu berhasil.
sumber
Ada
ansi2txt
perintah dalamcolorized-logs
paket di Ubuntu. Ini menghapus kode warna ANSI dengan baik, tetapi tidak menangani hal-hal seperti progress bar yang dihasilkan oleh emitting^H
atau^M
karakter untuk menimpa teks pada tempatnya.col -b
dapat menangani mereka , sehingga untuk hasil terbaik Anda bisa menggabungkan duasumber
Saya menemukan bahwa hanya menggunakan
cat
itu yang saya butuhkan untuk melihat outputscript
di terminal. Ini tidak membantu ketika mengarahkan output ke file lain, tetapi tidak membuat hasilnya dibaca, tidak seperticat -v
,col -b
atau editor teks.Untuk menghilangkan warna atau menyimpan hasil ke file, salin dan tempel output secara manual dari
cat
ke editor teks, atau kecat
perintah lain , yaitu:sumber
script
menyertakan output dengan kode warna terlampir, seperti dalam kasus OP?cat
hadiah warna asli, yang dapat dihapus dengan cara salin dan tempel manual. OP menggunakancat -v
dancol -b
, keduanya menampilkan kode alih-alih hasil akhir yang diformat dengan benar. Saya telah mengedit jawaban saya.Menindaklanjuti jawaban terakhir yang menggunakan tr dan: cntrl: mungkin bisa kita lakukan
sed "/^[[:cntrl:]]/d" output.txt
Ini sepertinya bekerja untuk saya karena semua baris yang dihasilkan oleh vi mulai dengan karakter kontrol. Kebetulan juga menghapus garis kosong dan garis yang dimulai dengan tab, meskipun itu bekerja untuk apa yang saya lakukan. Mungkin ada cara untuk mencocokkan karakter kontrol apa pun kecuali \ n \ m \ t.
Mungkin kita dapat mencari karakter kontrol tertentu, dan sepertinya semua baris sampah yang dihasilkan oleh vi mulai dengan apa yang tampak seperti ^ [. hexdump memberitahu saya karakter pertama adalah 1b, jadi ini sepertinya berhasil juga
sed "/^\x1b/d" output.txt
Ini terlihat mirip dengan jawaban yang diposting di atas, tetapi tidak berfungsi dengan baik karena setelah menjalankan perintah, beberapa junk chars sudah ditambahkan ke baris perintah seolah-olah pengguna telah mengetiknya.
sumber
ls --color
(seperti yang ditunjukkan dalam pertanyaan), solusi Anda akan menghapus hampir setiap baris yang berisi informasi. Tidak baik. Tapi terima kasih telah meninggalkan penggunaan yang tidak bergunacat
. :-) tr
- menerjemahkan atau menghapus karaktersumber
01;34m
misalnya, dan akan menghapus akhir barisnewline (\n)
.