Zoeken naar een string met newlines

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • SmokingSig
  • Registratie: November 2009
  • Laatst online: 29-09 15:27
Hi,

Hopelijk goede deel van het forum.

Ik wil bijvoobeeld dit zoeken:

"Eerste regel
Tweede regel
Nieuwe lijn"

In verschillende files.
Hoe is dit mogelijk ?

Dus in de genre van ""eerste regel" \n " tweede regel" \n "nieuwe lijn""

[ Voor 18% gewijzigd door SmokingSig op 23-07-2015 17:48 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Kun je wat duidelijker zijn? Wil je nou newlines vinden, of regels voorafgaande aan een blanco regel? En waar wil je dit mee gaan zoeken, welke taal?

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 16:02
En wat moet er precies uitkomen?

En dan kan het met perl, awk, bash, zelfgeschreven C programma, vast ook wel in Python of PHP en ongetwijfeld is er een zeer cryptisch onleesbare 'sed' oplossing voor. Net wat je wil.

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Je moet weten of er een CR of LF gebruikt wordt (of allebei) en daarna kan je je bestand gewoon langslopen op newline basis. Een regel zonder karakters met alleen een newline is een lege regel.

Acties:
  • 0 Henk 'm!

  • SmokingSig
  • Registratie: November 2009
  • Laatst online: 29-09 15:27
Wat ik dus wil zoeken is die specifieke blok tekst.

Om het duidelijker te maken, ik wil hetgene in bold vinden in die volgorde met dezelfde regels:

ik ga naar huis
ik ga naar boven
ik ga naar binnen
ik ga naar voor
ik ga naar achter
ik ga naar een vriend


Die drie regels in dezelfde volgorde in verschillende files.
Ik moet een fout vinden uit 100 config files uit backups, vandaar :)

Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 16:02
code:
1
awk '{if ((oud2=="ik ga naar voor") && (oud1=="ik ga naar achter") && ($0=="ik ga naar een vriend")) printf("%s\n%s\n%s\n", oud2, oud1, $0);oud2=oud1; oud1=$0}' test.txt

Acties:
  • 0 Henk 'm!

  • SmokingSig
  • Registratie: November 2009
  • Laatst online: 29-09 15:27
Bovenstaande werkt ook niet tegoei, dit zoek ik (met de ! e, de spatie):

code:
1
2
3
4
!
interface Vlan1
 no ip address
!

[ Voor 6% gewijzigd door SmokingSig op 24-07-2015 17:11 ]


Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 16:02
code:
1
awk '{if ((oud2=="!") && (oud1=="interface Vlan1") && ($0==" no ip address")) printf("%s\n%s\n%s\n", oud2, oud1, $0);oud2=oud1; oud1=$0}' test.txt


Maar nou mag je
1) zelf eens wat gaan proberen - het voelt nu wel heel erg als voorkauwen. Volgens mij is m'n script toch niet zo onduidelijk?
2) wat duidelijker zijn, want je laatste post is wat vaag: wil je nou vier regels matchen i.p.v. drie? En wat bedoel je met "(met de ! e, de spatie)"?

Oh, en wat johnkeates hiervoor schreef is ook wel zinnig: wat voor regeleinde wordt er gebruikt: DOS-formaat (carriage-return + linefeed) of Unix (linefeed)?
Eventueel de file eerst "dos2unix" doen, mijn script zal op een DOS-formaat file niet werken.

[ Voor 21% gewijzigd door vanaalten op 24-07-2015 17:41 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Het stukje code lijkt op Cisco config en die tftp je over 't algemeen naar je systeem voor backup, of laat deze via een andere manier opslaan.

Dus, wat is nu echt je exacte doel? Zoals vanaalten hierboven al aangeeft, gaan wij hier niets voorkauwen. Het wordt eens tijd dat je zelf wat probeert.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 12:22

CAPSLOCK2000

zie teletekst pagina 888

De zoekwoorden die je nodig hebt zijn "multiline regex" en dat samen met de tool of de scripttaal die je wil gebruiken. pcregrep is denk ik de eenvoudigste tool die precies doet wat je wil. Als je daarna nog iets met de gevonden tekst wil doen dan is awk, perl of python een betere keuze.

This post is warranted for the full amount you paid me for it.

Pagina: 1