Kaçış karakterlerini GNU Ekranının ekran günlüğünden kaldırma.% N


14

GNU Screen'in çıktı dosyasındaki ESC sekanslarını kaldırmak mümkün müdür? Renkler, sekmeler ve diğer çıkış karakterleri gibi şeyler günlük dosyalarına girer ve deşifre edilmesi zorlaşır.

Google & Co. denedim ve kılavuzu okudum, ancak uygun bir şey bulamadım ...

Belki de bir şeyi göz ardı ettim?

Yanıtlar:


11

Bu Perl büyüsünü deneyin:

perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0

Bunun için teşekkürler - bu harika! Hala orada ^ G ve ^ M karakterleri vardır, ama onun bir sürü daha okunabilir ...
shaond

1
Bunu ifadeye ekledi.
whitequark

Bu astarda kaç tane ASCII yüzü olduğunu merak ediyorum. 20 civarında saymayı bıraktım
John T

4
Tabii ki onları sayacak başka bir astar yazabilirim.
whitequark

10

Filtre kullanın.

ansifilter screenlog.txt > screenlog.txt.clean

bu her linux sisteminde bir şey mi yoksa kurulması gereken bir şey mi?
Journeyman Geek

@JourneymanGeek bile Ubuntu depolarında değil, bu yüzden tam olarak popüler olmadığını söyleyebilirim. Görünüşe göre proje sayfasından kendiniz almanız ve kendinizi çalıştırmanız / derlemeniz gerekiyor. Tam olarak popüler bir program demez miyim ansifilter.sourceforge.net
Simon Sheehan

Ben OSX ve kullanılmış brew install ansifilterve bir cazibe gibi çalıştı.
thekingoftruth

1
2012'nin dağıtım hakkındaki yorumlarından bu yana bunun nasıl değiştiğini bilmiyorum, ancak bunu Fedora'nın mevcut yayınına ilişkin repoda buldum (22).
dmh

10

Ayrıca daha az -r veya -R seçeneğini deneyin.

less -r screenlog.0

Güzel çözüm. Tüm ^ H (delete) karakterleri ile düzgün bir şekilde ilgilenir, ^ M hamlesi olmadan ilerleme çubuklarını görüntüler ve hatta renk istemimi korur! Tabii ki, bazen bir günlük görüntülemek yeterli değildir.
Quantum7

5

Screenlog.n'de oturumunuzu yakaladıktan sonra, dosyayı terminale bağlayabilir ve ardından kedinin çıktısını bir dosyaya dökmek için ekranın basılı kopya komutunu kullanabilirsiniz. Sonuç size kaçış dizisi olmayan temiz çıktılar sağlar.

Tek 'gotcha', basılı kopyanın geri kaydırma arabelleğindeki her şeyi yakaladığından ve geri kaydırma arabelleğinin yalnızca yakalamak istediğiniz şeyi içerdiğinden emin olmak gibi görünüyor.

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 

-H ifadesinin yalnızca anında görünümde değil tüm kaydırma geçmişini yakalamanızı sağlar

Screenlog.n.cleaned dosyası artık kedi çıktısının basılı kopyasını içerecek ve herhangi bir kaçış dizisi içermeyecek


Çok çok temiz . Diğer tüm perl / sed / python one-liner benim için başarısız oldu. Daha az -r / more doğrudan benim dosya ele olduğunu düşünürken çok sinir bozucu. Bir öneri wc -lbenim için işe yaramadı. 28226 döndü, ama benim durumumda gerçekten 33031 gerekiyordu.
malat

4

stringsBir ekran günlüğünü okunabilir yapmak için komutu kullanıyorum . Debian altında binutils paketinin bir parçasıdır.

Adam sayfasının dediği gibi:

dizeler - bir nesnede veya başka bir ikili dosyada yazdırılabilir dizeleri bulun


2

Eğer varsa screenKullanıcı daha sonra ekran basılı önerdiği çözüm Joel Verks' yazı büyük bir scrollback Gözlerinde farklı tanımlanmış olması varsayarak - En iyi çalışacaktır .screenrc:

defscrollback 10000

o zaman yapardınız:

  1. Senin Display screenlogdosyasını:

    $ cat screenlog.<screen_window_num>
    
  2. hardcopy -hGeçerli pencere içeriğini ve geri kaydırma arabelleğini hardcopy.#dosyaya kaydetmek için kullanın (ekran kılavuzu sayfasına bakın) :

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.