Xóa các ký tự thoát khỏi màn hình của GNU Screen.% N


14

Có thể xóa các chuỗi ESC trong tệp đầu ra của GNU Screen không? Những thứ như màu sắc, tab và các ký tự thoát khác xâm nhập vào tệp nhật ký và trở nên khó giải mã.

Tôi đã thử Tiến sĩ Google & Co. cũng như đọc hướng dẫn, nhưng không thể tìm thấy bất cứ điều gì phù hợp ...

Có lẽ tôi đã bỏ qua một cái gì đó?

Câu trả lời:


11

Hãy thử mảnh ma thuật Perl này:

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

Cảm ơn vì điều đó - thật TUYỆT VỜI! Nó vẫn còn có những nhân vật M ^ G và ^ trong đó, nhưng một mình rất nhiều dễ đọc hơn ...
shaond

1
Đã thêm nó vào biểu thức.
Whitequark

Tôi tự hỏi có bao nhiêu khuôn mặt ASCII trong một lớp lót đó. Tôi đã ngừng đếm khoảng 20.
John T

4
Tất nhiên tôi có thể viết một lớp lót khác sẽ đếm chúng.
Whitequark

10

Sử dụng ansifilter.

ansifilter screenlog.txt > screenlog.txt.clean

đó là một cái gì đó trong mọi hệ thống linux hoặc một cái gì đó cần phải được cài đặt?
Journeyman Geek

@JTHERmanGeek nó thậm chí không có trong repos Ubuntu, vì vậy tôi nói nó không thực sự phổ biến. Có vẻ như bạn phải tự lấy nó từ trang dự án và tự chạy / biên dịch. Chính xác sẽ không gọi nó là một chương trình phổ biến ansifilter.sourceforge.net
Simon Sheehan

Tôi đang dùng OSX và đã sử dụng brew install ansifiltervà nó hoạt động như một cơ duyên.
thekingoftruth

1
Tôi không biết điều này đã thay đổi như thế nào kể từ những bình luận năm 2012 về phân phối, nhưng tôi đã tìm thấy điều này trong bản repo cho bản phát hành hiện tại của Fedora (22).
dmh

10

Cũng thử tùy chọn -r hoặc -R ít hơn.

less -r screenlog.0

Giải pháp tốt đẹp. Nó xử lý đúng tất cả các ký tự ^ H (xóa), hiển thị các thanh tiến trình mà không cần ^ M cruft, và thậm chí giữ nguyên dấu nhắc màu của tôi! Tất nhiên, đôi khi hiển thị một bản ghi là không đủ.
Quantum7

5

Khi bạn chụp phiên của mình trong screenlog.n, bạn có thể đưa tệp vào thiết bị đầu cuối và sau đó sử dụng lệnh bản cứng của màn hình để chuyển đầu ra của mèo vào một tệp. Kết quả sẽ cung cấp cho bạn đầu ra sạch mà không có bất kỳ chuỗi thoát nào.

'Gotcha' duy nhất dường như là để đảm bảo rằng bản cứng chụp được mọi thứ trong bộ đệm cuộn và bộ đệm cuộn chỉ chứa những gì bạn muốn chụp.

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 

Lưu ý rằng -h đảm bảo rằng bạn nắm bắt toàn bộ lịch sử cuộn lại và không chỉ những gì trong chế độ xem ngay lập tức

Bây giờ, tệp screenlog.n.cleaned sẽ chứa bản cứng của đầu ra mèo và sẽ không bao gồm bất kỳ chuỗi thoát nào


Rất rất gọn gàng . Tất cả các lớp lót perl / sed / python khác đều thất bại đối với tôi. Rất bực bội khi nghĩ rằng ít -r / nhiều hơn đang xử lý tệp của tôi trực tiếp. Một đề nghị wc -lđã không làm việc cho tôi. Nó đã trả lại 28226, nhưng thực sự cần 33031 trong trường hợp của tôi.
malat

4

Tôi sử dụng stringslệnh để làm cho một bản ghi màn hình có thể đọc được. Trong Debian, nó là một phần của gói binutils.

Như trang người đàn ông của nó nói:

chuỗi - tìm các chuỗi có thể in trong một đối tượng hoặc tệp nhị phân khác


2

Nếu bạn là screenngười dùng thì giải pháp cứng màn hình được đề xuất bởi bài đăng của Joel Verks sẽ hoạt động tốt nhất - giả sử rằng bạn có một cuộn ngược lớn được xác định trong .screenrc:

defscrollback 10000

sau đó bạn sẽ làm:

  1. Hiển thị screenlogtập tin của bạn :

    $ cat screenlog.<screen_window_num>
    
  2. Sử dụng hardcopy -h(xem trang man màn hình) để lưu nội dung cửa sổ hiện tại và bộ đệm cuộn của nó vào hardcopy.#tệp:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.