sed를 사용하여 패턴 시작부터 줄 끝까지 텍스트 정렬

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번째 문자인 줄 끝으로 정렬해야 합니다. ";"로 시작하는 줄은 두 번째 ";"가 나타날 때까지 변경되지 않고 유지되어야 하며, 두 번째 ";"부터 줄 끝까지의 시선은 문자 41에 정렬되어야 합니다. 두 번째 ";"는 문자 41 앞이나 뒤에 있을 수 있습니다.

SED 또는 AWK를 사용하여 이것이 가능합니까?

답변1

펄은 어떻습니까?

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 '
    (p=index(substr($0,2), ";")) > 0 {
        printf "%-40s%s\n", substr($0,1,p), substr($0,p)
        next
    }
    {print}
' file

관련 정보