Использование sed для выравнивания текста, начиная с шаблона и заканчивая строкой

У меня есть такой текст:

LDX LEVEL LDA INITD015,X ; INITIAL ACTIVE SPRITES STA $D015 STA SAVED015 LDA INITXPOS,X ; INITIAL HERO X COORDINATE STA XPOS LDA INITYPOS,X ; INITIAL HERO Y COORDINATE STA YPOS LDA INITXPOSMUM,X ; INITIAL MUMMY X COORDINATE STA XPOSMUM LDA LEVEL BNE NOTLOADENDELEMENTS LDA FLAGLOSELIFE BNE NOTLOADENDELEMENTS ; LDX #<BIGELEMENTSFILE ; LOW BYTE ; LDY #>BIGELEMENTSFILE ; HI BYTE ; JSR LOADFILE_EXOMIZER 

где мне нужно выровнять текст, начинающийся с символа ";" который НЕ является первым символом строки, до конца строки, на номеру 41 строки. Линии, начинающиеся с ";" должны быть нетронутыми до (и если) второго «;» выставляется, затем смотрит со второго »; до конца строки должны быть выровнены на char 41. Может быть, второй «;» до или после char 41.

Может ли это быть достигнуто с помощью SED или AWK?

  • Как выполнить операцию по отдельным матчам в полной строке
  • Чтобы удалить новые строки после пустой строки
  • Как я могу передать $ 1 в sed?
  • Извлечь точное количество элементов из одного и того же идентификатора
  • sed: многострочная замена блока конфигурации
  • Возможно ли, с `sed` или иначе, применить преобразование регулярных выражений к входному потоку, который не может содержать строки новой строки?
  • Sed - замена строк с помощью группировок
  • Как ограничить MAX MIN длиной строки?
  • One Solution collect form web for “Использование sed для выравнивания текста, начиная с шаблона и заканчивая строкой”

    Как насчет perl?

     perl -pe 's/^(.+?)(?=;)/$1 . " "x(41-length($1))/e' file 
      LDX LEVEL LDA INITD015,X ; INITIAL ACTIVE SPRITES STA $D015 STA SAVED015 LDA INITXPOS,X ; INITIAL HERO X COORDINATE STA XPOS LDA INITYPOS,X ; INITIAL HERO Y COORDINATE STA YPOS LDA INITXPOSMUM,X ; INITIAL MUMMY X COORDINATE STA XPOSMUM LDA LEVEL BNE NOTLOADENDELEMENTS LDA FLAGLOSELIFE BNE NOTLOADENDELEMENTS ; LDX #<BIGELEMENTSFILE ; LOW BYTE ; LDY #>BIGELEMENTSFILE ; HI BYTE ; JSR LOADFILE_EXOMIZER 

    AWK

     awk ' (p=index(substr($0,2), ";")) > 0 { printf "%-40s%s\n", substr($0,1,p), substr($0,p) next } {print} ' file 
    Interesting Posts

    Как приостановить и возобновить процессы, такие как bash

    Как создать список элементов под определенными заголовками в текстовом документе? (Linux / Bash)

    ssh to localhost не работает, удаленные ssh works

    Как интерпретировать и реагировать на журнал Shorewall?

    Как глобально настроить безопасные клиенты с помощью OpenSSL на Oracle Linux 5 / RHEL 5?

    Захват текста между фигурными фигурными скобками в предварительно обработанном файле C

    Как процесс может потреблять больше / меньше виртуальной памяти (согласно верхней части), тогда размер страницы становится доступным?

    Хорошо ли хранить / var / tmp на SSD?

    Как установить GRUB на весь диск ext4 без таблицы разделов?

    Как установить команды, которые запускаются перед каждым приглашением?

    debootstrap не загружает сжатие Debian

    что такое сообщение об ошибке «profile_replace» apparmor

    Путаница в отношении создания самоподписанного сертификата для портала приложений, разработанного с использованием liferay

    Хранение одного бита информации в пользовательском пространстве

    Добавление в PS1 в bash_profile

    Linux и Unix - лучшая ОС в мире.