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:smith@contoso.com
proxyAddresses: smtp:John.Smith@contoso.com
proxyAddresses: smtp:jsmith@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith
dn: CN=Tom Frank,OU=Users,DC=contoso,DC=com
sAMAccountName: frank
proxyAddresses: SMTP:frank@contoso.com
proxyAddresses: smtp:Tom.Frank@contoso.com
proxyAddresses: smtp:frank@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/TOMFRANK
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:smith@contoso.com
proxyAddresses: smtp:John.Smith@contoso.com
proxyAddresses: smtp:jsmith@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
}
}
}
Reply to: