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
    }
  }

}

Répondre à