Re: sed et travail sur un bloc contenant un motif
Le 10/10/2017 à 08:57, Dominique Dumont a écrit : On Monday, 9 October 2017 22:11:31 CEST Alexandre Hoïde wrote: sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ? Pas d'idée pour sed non plus. L'exemple avec awk m'a fait penser à une option peu connue de perl qui permet de séparer un fichier en paragraphes ( -000) . Ce qui donne avec l'exemple de fichier ldif donné par Alexandre: $ perl -n -000 -e 'print if /sAMAccountName: smith/;' fichier.ldif dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith Merci, je vais tester ça pour voir si ça va bien mais ça semble pas mal. J'ai un fichier texte de 150Mo à parser donc je choisirai l'option la plus rapide ! J'ai eu ceci également ($1 motif, $2 fichier ldif à parser: #!/bin/bash # Recherche d'un uid sed -n "/^dn: uid=/{:a;N;/\n$/!ba;/$1/p}" $2
Re: sed et travail sur un bloc contenant un motif
On Monday, 9 October 2017 22:11:31 CEST Alexandre Hoïde wrote: > sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ? Pas d'idée pour sed non plus. L'exemple avec awk m'a fait penser à une option peu connue de perl qui permet de séparer un fichier en paragraphes ( -000) . Ce qui donne avec l'exemple de fichier ldif donné par Alexandre: $ perl -n -000 -e 'print if /sAMAccountName: smith/;' fichier.ldif dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith HTH -- https://github.com/dod38fr/ -o- http://search.cpan.org/~ddumont/ http://ddumont.wordpress.com/ -o- irc: dod at irc.debian.org
Re: sed et travail sur un bloc contenant un motif
On Sun, Oct 08, 2017 at 01:47:15PM +0200, Migrec wrote: >Bonjour, > >J'ai un petit soucis de script et je pensais utiliser sed pour le régler >mais mes connaissances sont rudimentaires... Est-ce possible d'afficher le >bloc compris entre MOTIFDEBUT et MOTIFFIN et qui contient MOTIF sur l'une >des lignes ? > >Je veux en gros afficher une entrée d'un fichier LDIF pour une personne en >particulier. Donc les lignes avant et les lignes après jusqu'à la nouvelle >ligne suivante. > >J'ai la fin avec ça : > > $ sed -ne "/MOTIF/,/^$/p" annuaire.ldif > >Sed peut faire ça ? Salut Migrec, sed, peut-être… perso je ne vois pas, mais peut-être. Par contre, gawk ? Avec les deux fichiers joints (ldif.awk et fichier.ldif) la ligne de commande : $ gawk -v acc_name="smith" -f ldif.awk fichier.ldif extrait l'enregistrement complet de « smith » (passé en argument). Si j'ai bien compris ce que tu voulais obtenir, c'est un petit exemple rudimentaire. -- ___ | $ post_tenebras ↲ | waouh! | GNU\ /|\ | -- * -- | o | $ who ↲/ \|_-- ~_| | Alexandre Hoïde | _/| | --- dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith dn: CN=Tom Frank,OU=Users,DC=contoso,DC=com sAMAccountName: frank proxyAddresses: SMTP:fr...@contoso.com proxyAddresses: smtp:tom.fr...@contoso.com proxyAddresses: smtp:fr...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/TOMFRANK dn: CN=John Smith,OU=Users,DC=contoso,DC=com proxyAddresses: SMTP:sm...@contoso.com proxyAddresses: smtp:john.sm...@contoso.com proxyAddresses: smtp:jsm...@elsewhere.com proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH sAMAccountName: smith BEGIN { RS = "\n\n" # Record separator: empty line FS = "\n"# Field separator: newline acc_str = "sAMAccountName: " acc_name } { for (i = 1; i <= NF; i++) { if (match($i, acc_str)) { print break } } }