Re: sed et travail sur un bloc contenant un motif

2017-10-11 Par sujet Migrec

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

2017-10-10 Par sujet Dominique Dumont
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

2017-10-09 Par sujet Alexandre Hoïde
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
}
  }

}