Видалення символів втечі з екранного списку екрана GNU.% N


14

Чи можливо видалити послідовності ESC у вихідному файлі екрану GNU? Такі речі, як кольори, вкладки та інші символи втечі, проникають у файли журналів і їх важко розшифрувати.

Я спробував доктора Google & Co., а також читав посібник, але не зміг знайти нічого підходящого ...

Можливо, я щось пропустив?

Відповіді:


11

Спробуйте цю частину магії 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.
Джон Т

4
Звичайно, я можу написати ще один вкладиш, який буде рахувати їх.
Whitequark

10

Використовуйте ансифільтр.

ansifilter screenlog.txt > screenlog.txt.clean

це щось у кожній системі Linux чи щось, що потрібно встановити?
Подорожник Geek

@JourneymanGeek навіть не в репортах Ubuntu, тому я б сказав, що це не зовсім популярне. Схоже, вам доведеться отримати його самостійно зі сторінки проекту та запустити / скласти самостійно. Точно не назвеш це популярною програмою ansifilter.sourceforge.net
Саймон

Я на OSX і користувався, brew install ansifilterі це працювало як шарм.
thekingoftruth

1
Я не знаю, як це змінилося після коментарів 2012 року щодо розповсюдження, але я знайшов це у репортажі про поточний реліз Fedora (22).
dmh

10

Спробуйте також варіант -r або -R менше.

less -r screenlog.0

Приємне рішення. Він належним чином обробляє всі ^ H (видалити) символи, відображає смуги прогресу без ^ М суглобу і навіть зберігає моє кольорове підказку! Звичайно, іноді відображення журналу недостатньо.
Quantum7

5

Після того, як ви зафіксуєте сеанс у screenlog.n, ви можете перенести файл до терміналу, а потім скористатися командою жорсткої копії екрана, щоб скинути вихід кішки у файл. Результат забезпечить вам чистий вихід, який не має послідовностей евакуації.

Здається, єдиним "gotcha" є переконання, що копія фіксує все, що відбувається в буфері прокрутки, і що буфер прокрутки містить лише те, що ви хочете зробити.

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.c тепер буде містити копію вихідного коду і не буде містити жодних послідовностей запуску


Дуже дуже акуратно . Усі інші perl / sed / python однолінійні для мене не вдалися. Дуже засмучує, думаючи, що менше -r / більше безпосередньо обробляв мій файл. Одна пропозиція wc -lне спрацювала для мене. Він повернув 28226, але дійсно знадобився 33031 в моєму випадку.
малат

4

Я використовую stringsкоманду, щоб зробити журнал екрана читабельним. Під Debian це частина пакету binutils.

Як говорить його man page:

рядки - знайдіть рядки для друку в об'єкті чи іншому бінарному файлі


2

Якщо ви screenкористувач, то рішення на екрані паперової копії, запропоноване повідомленням Джоела Веркса, буде найкращим чином - якщо припустимо, що у вашому .screenrc:

defscrollback 10000

тоді ви зробите:

  1. Показати свій screenlogфайл:

    $ cat screenlog.<screen_window_num>
    
  2. Використовуйте hardcopy -h(див. Сторінку чоловіка екрана), щоб зберегти поточний вміст вікна та його буфер прокрутки у hardcopy.#файл:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.