การลบตัวอักขระเลี่ยงออกจากหน้าจอ GNU Screen %n


11

เป็นไปได้ไหมที่จะลบลำดับ ESC ในไฟล์เอาต์พุตของหน้าจอ GNU สิ่งต่าง ๆ เช่นสีแท็บและอักขระการหลบหลีกอื่น ๆ เข้าไปในแฟ้มบันทึกและถอดรหัสได้ยาก

ฉันลองดร. Google & amp; จำกัด รวมทั้งอ่านคู่มือ แต่ไม่สามารถหาสิ่งที่เหมาะสม ...

บางทีฉันอาจมองข้ามบางสิ่ง

คำตอบ:


10

ลองใช้ Perl เพิร์ลชิ้นนี้:

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

ขอบคุณสำหรับสิ่งนั้น - นั่นวิเศษมาก! มันยังคงมีอักขระ ^ G และ ^ M อยู่ในนั้น แต่มันคือ จำนวนมาก อ่านได้มากขึ้น ...
shaond

1
เสริมว่าในการแสดงออก
whitequark

ฉันสงสัยว่ามีกี่ ASCII ใบหน้าในหนึ่งซับ ฉันหยุดนับประมาณ 20
John T

4
แน่นอนฉันสามารถเขียนอีกหนึ่งซับที่จะนับพวกเขา
whitequark

9

ลองใช้ตัวเลือก -r หรือ -R น้อยกว่า

less -r screenlog.0

ทางออกที่ดี มันเกี่ยวข้องกับตัวละคร ^ H (ลบ) ทั้งหมดอย่างถูกต้องแสดงแถบความคืบหน้าโดยไม่มี cruft ^ M และยังรักษาสีของฉันให้พร้อม! แน่นอนว่าบางครั้งการแสดงบันทึกไม่เพียงพอ
Quantum7

8

ใช้ ansifilter

ansifilter screenlog.txt > screenlog.txt.clean

เป็นสิ่งที่อยู่ในทุกระบบลินุกซ์หรือสิ่งที่ต้องติดตั้ง?
Journeyman Geek

@ JourneymanGeek มันไม่ได้อยู่ใน repos ของ Ubuntu ดังนั้นฉันเลยบอกว่ามันไม่ได้รับความนิยมอย่างแน่นอน ดูเหมือนว่าคุณจะต้องรับมันเองจากหน้าโครงการและเรียกใช้ / คอมไพล์ด้วยตัวคุณเอง จะไม่เรียกมันว่าเป็นโปรแกรมยอดนิยม ansifilter.sourceforge.net
Simon Sheehan

ฉันใช้ OSX และใช้งานอยู่ brew install ansifilter และมันใช้งานได้อย่างมีเสน่ห์
thekingoftruth

ฉันไม่ทราบว่าสิ่งนี้เปลี่ยนแปลงไปอย่างไรตั้งแต่ความคิดเห็น 2012 เกี่ยวกับการแจกจ่าย แต่ฉันพบสิ่งนี้ใน repo สำหรับ Fedora รุ่นปัจจุบัน (22)
dmh

4

เมื่อคุณบันทึกเซสชั่นของคุณใน screenlog.n คุณสามารถ cat ไฟล์ไปยัง terminal แล้วใช้คำสั่ง hardcopy ของหน้าจอเพื่อดัมพ์เอาต์พุตของ cat ไปยังไฟล์ ผลลัพธ์จะให้ผลลัพธ์ที่สะอาดซึ่งไม่มีลำดับการหลีกเลี่ยงใด ๆ

ดูเหมือนว่า 'gotcha' เพียงอย่างเดียวเพื่อให้แน่ใจว่า hardcopy จับภาพทุกสิ่งใน buffer scrollback และบัฟเฟอร์ scrollback มีเฉพาะสิ่งที่คุณต้องการดักจับ

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 ช่วยให้แน่ใจว่าคุณได้บันทึกประวัติการเลื่อนทั้งหมดไม่ใช่เฉพาะในมุมมองทันที

ไฟล์ screenlog.n.cleaned จะมีสำเนาของเอาต์พุต cat และจะไม่รวมลำดับการหลีกเลี่ยงใด ๆ


เป็นอย่างมาก เรียบร้อย . perl / sed / python อื่น ๆ ทั้งหมดซับเดียวล้มเหลวสำหรับฉัน น่าผิดหวังมากเมื่อคิดว่าน้อย -r / มากกว่าจัดการไฟล์ของฉันโดยตรง หนึ่งข้อเสนอแนะ wc -l ไม่ได้ผลสำหรับฉัน มันกลับ 28226 แต่ต้องการ 33031 จริงๆในกรณีของฉัน
malat

4

ฉันใช้ strings คำสั่งเพื่อให้อ่านบันทึกหน้าจอ ภายใต้ Debian มันเป็นส่วนหนึ่งของแพ็คเกจ binutils

ในฐานะที่เป็นหน้าคนพูดว่า:

strings - ค้นหาสตริงที่พิมพ์ได้   ในวัตถุหรือไฟล์ไบนารีอื่น ๆ


0

ถ้าคุณคือ screen ผู้ใช้แล้ว หน้าจอปกแข็ง ทางออกที่แนะนำโดย โจเอล โพสต์ของ Verks จะทำงานได้ดีที่สุดสมมติว่าคุณมี scrollback ขนาดใหญ่ กำหนดไว้ในของคุณ .screenrc:

defscrollback 10000

แล้วคุณจะทำ:

  1. แสดงของคุณ screenlog ไฟล์:

    $ cat screenlog.<screen_window_num>
    
  2. ใช้ hardcopy -h (ดูหน้าคนหน้าจอ) เพื่อบันทึกเนื้อหาหน้าต่างปัจจุบัน และบัฟเฟอร์การเลื่อนลงใน hardcopy.# ไฟล์:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.