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 nl
1 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/ /'
Komentoj