Menghapus karakter pelarian dari log layar Layar GNU.% N

14

Apakah mungkin untuk menghapus urutan ESC dalam file output Layar GNU? Hal-hal seperti warna, tab dan karakter pelarian lainnya masuk ke file log dan menjadi sulit untuk diuraikan.

Saya sudah mencoba Dr. Google & Co. serta membaca manual, tetapi belum dapat menemukan yang cocok ...

Mungkin saya sudah melewatkan sesuatu?

shaond
sumber

Jawaban:

11

Coba sepotong Perl sihir ini:

perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0
whitequark
sumber
Terima kasih untuk itu - itu MENGAGUMKAN! Masih memiliki karakter ^ G dan ^ M di sana, tetapi jauh lebih mudah dibaca ...
shaond
1
Menambahkan itu ke ekspresi.
whitequark
Saya bertanya-tanya berapa banyak wajah ASCII dalam satu liner itu. Saya berhenti menghitung sekitar 20.
John T
4
Tentu saja saya bisa menulis satu kalimat lagi yang akan menghitungnya.
whitequark
10

Gunakan ansifilter.

ansifilter screenlog.txt > screenlog.txt.clean
Jan
sumber
Apakah itu sesuatu di setiap sistem linux atau sesuatu yang perlu diinstal?
Journeyman Geek
@JourneymanGeek bahkan tidak ada dalam repo Ubuntu, jadi saya katakan itu tidak terlalu populer. Sepertinya Anda harus mendapatkannya sendiri dari halaman proyek, dan jalankan / kompilasi sendiri. Tidak akan tepatnya menyebutnya program populer ansifilter.sourceforge.net
Simon Sheehan
Saya menggunakan OSX dan digunakan brew install ansifilterdan itu bekerja seperti pesona.
thekingoftruth
1
Saya tidak tahu bagaimana ini telah berubah sejak komentar 2012 tentang distribusi, tetapi saya menemukan ini di repo untuk rilis Fedora saat ini (22).
dmh
10

Coba juga opsi -r atau -R yang kurang.

less -r screenlog.0
dex
sumber
Solusi yang bagus. Ini berurusan dengan semua karakter ^ H (hapus) dengan benar, menampilkan bilah kemajuan tanpa kesalahan ^ M, dan bahkan mempertahankan prompt warna saya! Tentu saja, terkadang menampilkan log tidak cukup.
Quantum7
5

Setelah menangkap sesi Anda di screenlog.n, Anda bisa memasukkan file ke terminal dan kemudian menggunakan perintah hardcopy layar untuk membuang output cat ke file. Hasilnya akan memberi Anda output bersih yang tidak memiliki urutan pelarian.

Satu-satunya 'gotcha' tampaknya adalah memastikan bahwa hardcopy menangkap semua hal di buffer scrollback dan bahwa buffer scrollback hanya berisi apa yang ingin Anda tangkap.

1. $ screen
2. $ cd /path/to/screenlog.n directory/
3. $ wc -l screenlog.n 
4. $ screen -X scrollback 245 # 245 is the number of lines found from your wc command + 5 
5. $ cat screenlog.n
6. $ screen -X hardcopy -h screenlog.n.cleaned 

Perhatikan bahwa -h memastikan bahwa Anda menangkap seluruh riwayat scrollback dan bukan hanya whats di tampilan langsung

File screenlog.n.cleaned sekarang akan berisi hardcopy dari output cat dan tidak akan menyertakan urutan escape

Joel Verks
sumber
Sangat sangat rapi . Semua perl / sed / python one-liner gagal untuk saya. Sangat frustasi ketika berpikir bahwa kurang -r / lebih menangani file saya secara langsung. Satu saran wc -ltidak berhasil untuk saya. Ia mengembalikan 28.226, tetapi benar-benar membutuhkan 33031 dalam kasus saya.
malat
4

Saya menggunakan stringsperintah untuk membuat log layar dapat dibaca. Di bawah Debian itu adalah bagian dari paket binutils.

Seperti yang dikatakan halaman manualnya:

string - menemukan string yang dapat dicetak dalam suatu objek, atau file biner lainnya

blasio
sumber
2

Jika Anda screenpengguna maka solusi hardcopy layar yang disarankan oleh postingan Joel Verks akan bekerja paling baik - dengan asumsi bahwa Anda memiliki scrollback besar yang ditentukan dalam .screenrc:

defscrollback 10000

maka Anda akan melakukannya:

  1. Tampilkan screenlogfile Anda :

    $ cat screenlog.<screen_window_num>
    
  2. Gunakan hardcopy -h(lihat halaman manual layar) untuk menyimpan konten jendela saat ini dan buffer scrollback-nya ke dalam hardcopy.#file:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Steve McKuhr
sumber