Использование 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-n числа в порядке
  • Использует ли команда sed команду «a» для префикса переносимой строки?
  • найти строки, которые не заканчиваются на «rpms» с sed
  • Каким образом можно фильтровать текстовый файл для удаления пустых строк?
  • Полосы пробелов после одиночных заглавных букв с sed
  • Замена нескольких пустых строк одной пустой строкой в ​​vim / sed
  • sed соответствует только во второй строке
  • 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 
    Linux и Unix - лучшая ОС в мире.