Numeri poemajn liniojn, po unu ĉiujn kvin versojn

Versoj de poemoj, kiujn ni trovas en la Interreto, malofte estas numeritaj. Numerado ne necesas por legado, sed kiam oni analizas kaj komentas longan poemon, tio ege utilas. En ĉi tiu artikolo mi lernigas kiel numeri tekstdosieron (tie ni devas alglui poemon kopiita el la Interreto).

Kiel ekzemplon de dosiero mi uzas la poemon Mia biblioteko de Raymond Schwartz. Se ni volas numeri ĉiujn ĝiajn liniojn, sufiĉas plenumi la sekvan komandon:

nl Mia-biblioteko-Raymond-Schwartz.txt

Jen la rezulto:

     1  Kiel bravaj grenadiroj,
     2  Vicigitaj flank'-ĉe-flanko,
     3  Sur bretar' de l' libroŝranko
     4  Ili staras en spaliroj.

     5  Admirinda kern-falango,
     6  Ĉiam preta, kun rapiroj
     7  De l' spirit', al militiroj
     8  Kontraŭ la tirana Manko.

     9  Botelvic' da eliksiroj
    10  El la plej nobela sango
    11  Donas spriton al la lango

    12  Kaj inspiron al la liroj
    13  Pli ol lernolibrodiroj!
    14  Al Botel' do estu danko!

Konvene nl1 implicite ne numeras malplenajn liniojn.

Kion fari, se ni volas numeri ĉiun kvin liniojn? Ni forigas la nombron, kiuj ne estas kvin-obloj. Ni povas doni tiun laboron al Perl2:

nl Mia-biblioteko-Raymond-Schwartz.txt | perl -pe 's/(^ *[0-9]*[12346789]\b)/" " x length($1)/gei'

Jen la rezulto:

        Kiel bravaj grenadiroj,
        Vicigitaj flank'-ĉe-flanko,
        Sur bretar' de l' libroŝranko
        Ili staras en spaliroj.

      5 Admirinda kern-falango,
        Ĉiam preta, kun rapiroj
        De l' spirit', al militiroj
        Kontraŭ la tirana Manko.

        Botelvic' da eliksiroj
     10 El la plej nobela sango
        Donas spriton al la lango

        Kaj inspiron al la liroj
        Pli ol lernolibrodiroj!
        Al Botel' do estu danko!

La antaŭa regula esprimo anstataŭas la numerojn, kiuj ne estas kvin-obloj, en la linia maldekstro per spacetoj. Ĉar nl metas kelkajn spacetojn en la linia maldekstro, ni uzas ^ *. Por eviti signa misaranĝo, ni kalkulas la longecon de la elekto, kiun ni anstataŭigas per spacetoj (" " x length($1)).

Eblas pli simple fari tion per sed, sed estiĝus eta signa misaranĝo; tamen, ĉar nl implicite uzas tabojn post numeroj, ĝi ne videblas.

nl Mia-biblioteko-Raymond-Schwartz.txt | sed 's/^ *[[:digit:]]*[1|2|3|4|6|7|8|9]\b/   /'

  1. Ĝi apartenas al la pako coreutils, kiu jam estas instalita en multaj distribuaĵoj de GNU/Linukso. 

  2. Rulu sudo apt install perl, se ĝi ne estas instalita en via komputilo (por distribuaĵoj bazitaj sur Debiano). 

Komentoj