line numbers toevoegen aan sed (o.i.d.)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
Ik heb een XML bestand waarbij ik de matches van een line number wil voorzien. Nu lees ik dat het = teken regelnummers kan toevoegen, echter hierbij wordt automatisch ook een new line toegevoegd! Als resultaat krijg ik dan dus:

1
dit
2
is
3
een
4
test


Wat ik natuurlijk helemaal niet wil... Is het mogelijk om een volgende output te krijgen?

1.  dit
2.  is
3.  een
4.  test
...
10. hallo


Ik wil eigenlijk dat de regelnummers goed uitgelijnd worden. Als je 1 t/m 9 hebt gaat dit natuurlijk goed maar als je 1 t/m 99 hebt dan moeten de 1 t/m 9 een extra spatie bevatten. Bij 1 t/m 999 moeten dit 2 spaties worden, etc.

Hoe kan je zoiets het beste aanpakken? De sed numbering krijg ik niet voor elkaar vanwege de new line die sed automatisch toevoegd. Daarnaast heb ik geen idee hoe ik "dynamische" spaties kan toevoegen.

PSN: Norfirin


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Ik begrijp nog niet precies wat je precies wilt bereiken, maar cat -n geeft nummers.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 05-10 15:01

MartinMeijerink

Computerrorist

gewoon |nl aan je commando toevoegen!
dan wordt het allemaal goed uitgelijnd ook.

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
CyBeR schreef op zondag 03 april 2011 @ 21:41:
Ik begrijp nog niet precies wat je precies wilt bereiken, maar cat -n geeft nummers.
Sorry, was misschien handig om er bij te zetten ;)

Ik wil de XML van een Windows Media Player Playlist uitlezen om automatisch de nummers te extracten en ik wil dan tevens de track nummers er bij zetten. Alles werkt tot nu toe, alleen de track nummers nog niet.

Die cat -n werkt trouwens perfect! Alleen krijg ik de boel nog niet goed geformat. Hoe krijg ik de dubbele spatie weg en een punt ná het track nummer?

echo "hello" | cat -n
     1	hello


EDIT :

Thanks Martin!! Het onderstaande werkt perfecto...

| nl -s '. '

[ Voor 6% gewijzigd door Tony L op 03-04-2011 22:03 ]

PSN: Norfirin


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

dan moet je nl gebruiken:

code:
1
2
3
$ cat /etc/passwd | nl -s '. '
     1. root:x:0:0:root:/root:/bin/bash
     2. daemon:x:1:1:daemon:/usr/sbin:/bin/sh


met -w kun je ook nog de breedte van het getal aangeven.

[ Voor 15% gewijzigd door CyBeR op 03-04-2011 22:03 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
CyBeR schreef op zondag 03 april 2011 @ 22:03:
dan moet je nl gebruiken:

code:
1
2
3
$ cat /etc/passwd | nl -s '. '
     1. root:x:0:0:root:/root:/bin/bash
     2. daemon:x:1:1:daemon:/usr/sbin:/bin/sh


met -w kun je ook nog de breedte van het getal aangeven.
Haha thanks CyBeR! Ik had het toevallig net zelf gevonden ;)
Wat ik nog wel lastig vind is dat je met de terminal gigaaaaantisch veel mogelijkheden hebt. Je moet alleen wel het goede gereedschapje vinden! Heeft iemand tips hoe ik dit zelf eenvoudig kan uitvogelen? Met google kwam ik bijvoorbeeld nooit op het commando "nl". Wel op awt, sed, e.d. maar "nl" is 100x eenvoudiger en doet precies wat ik wil.

PSN: Norfirin


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Tsja, dat is een beetje lastig inderdaad. Echter als je googlet op 'linux add line numbers' kom je wel op 'nl' uit ;) Met awk had je dit ook wel kunnen doen trouwens, alleen dan zonder uitlijning:

code:
1
$ awk '{ print NR ". " $0 }'

[ Voor 35% gewijzigd door CyBeR op 03-04-2011 22:09 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 04-10 16:22
Als je met XML werkt vind ik xmlstarlet vaak een handigere tool dan sed, dat werkt ook als het XML anders geformatteerd is, bijvoorbeeld.

code:
1
xmlstarlet select --text --template --match "//media" --value-of "@src" --nl Playlist2.wpl | nl -s '. '


Je moet wel weten hoe XPath expressies werken, maar als je die kent is het heel krachtig. Dit voorbeeld print dus de inhoud van het src attribuut van alle media XML elementen.

Acties:
  • 0 Henk 'm!

  • Tony L
  • Registratie: September 2005
  • Laatst online: 07-11-2015
matthijsln schreef op maandag 04 april 2011 @ 00:26:
Als je met XML werkt vind ik xmlstarlet vaak een handigere tool dan sed, dat werkt ook als het XML anders geformatteerd is, bijvoorbeeld.

code:
1
xmlstarlet select --text --template --match "//media" --value-of "@src" --nl Playlist2.wpl | nl -s '. '


Je moet wel weten hoe XPath expressies werken, maar als je die kent is het heel krachtig. Dit voorbeeld print dus de inhoud van het src attribuut van alle media XML elementen.
Geweldig! Ik ben helemaal bekend met XPath dus dit is perfect. Ik zag trouwens net dat je ook een "xpath" command hebt binnen OSX. Dit werkt echter niet zo heel handig, wanneer ik | nl -s '. ' er achter zet gaat de hele layout kapot.

Hoe kan ik trouwens xmlstarlet "installeren" dat hij altijd en overal binnen de terminal aangeroepen kan worden? Ik kan volgens mij de binary gewoon naar de /bin/ directory kopieëren maar misschien dat er een betere locatie voor is?

PSN: Norfirin

Pagina: 1