Unix sed
Résolu/Fermé
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
-
30 sept. 2011 à 15:36
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 30 sept. 2011 à 16:36
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 30 sept. 2011 à 16:36
3 réponses
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
30 sept. 2011 à 15:45
30 sept. 2011 à 15:45
voilà à quoi ressemble mon code pour le moment:
perl -0777 -ne 'print "$1\n" while/dn: (.*?)\nobjectClass/gs' $LDIF_USERS > $SEARCH_USERS
TEMP=temp.tmp
while read ligne
do
set $(echo $ligne)
user=$(eval echo $1)
perl -0777 -ne 'print "$1\n" while/dn: (.*?)\nobjectClass/gs' $LDIF_USERS > $TEMP
while read ligne
do
set $(echo $ligne)
user2=$(eval echo$1)
if [ $user = $user2 ]
then
sed -i '/sn: */aref: '$URL_GARDIAN'/'$user'' $LDIF_USERS
fi
done < $LDIF_USERS
done < $SEARCH_USERS
zipe31
Messages postés
36316
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 545
30 sept. 2011 à 15:45
30 sept. 2011 à 15:45
Salut,
Un truc comme ça :
;-))
Un truc comme ça :
$ cat plop
dn: uid=toto,cn=toto,c=fr
objectclass: top
dn: uid=tata,cn=tata,c=fr
objectclass: top
dn: uid=titi,cn=titi,c=fr
objectclass: top
$ sed '/^dn/{h;N;x;s/dn:/ref:/;H;g}' plop
dn: uid=toto,cn=toto,c=fr
objectclass: top
ref: uid=toto,cn=toto,c=fr
dn: uid=tata,cn=tata,c=fr
objectclass: top
ref: uid=tata,cn=tata,c=fr
dn: uid=titi,cn=titi,c=fr
objectclass: top
ref: uid=titi,cn=titi,c=fr
$
;-))
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
30 sept. 2011 à 15:56
30 sept. 2011 à 15:56
Parfait ça fonctionne très bien (même si je n'ai pas tout saisi à la commande)
Du coup si je veux avoir
Du coup si je veux avoir
ref: http://test.html/uid=titi,cn=titi,c=fr</code> il me suffis de passer la commande suivante:
sed '/^dn/{h;N;x;s/dn:/ref: '$URL'/;H;g}'???
zipe31
Messages postés
36316
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 545
Modifié par zipe31 le 30/09/2011 à 16:11
Modifié par zipe31 le 30/09/2011 à 16:11
Euh... non, pas tout a fait ;-(
Comme ta variable contient des slashs, il faut changer le délimiteur de la commande "s" (substitution) de sed (dans l'exemple ci-dessous, j'ai utilisé des dièses (#) à la palce des slashs (/) :
$ URL="http://test.html/"
$ sed '/^dn/{h;N;x;s#dn: #ref:'"${URL}"'#;H;g}' plop
dn: uid=toto,cn=toto,c=fr
objectclass: top
ref:http://test.html/uid=toto,cn=toto,c=fr
dn: uid=tata,cn=tata,c=fr
objectclass: top
ref:http://test.html/uid=tata,cn=tata,c=fr
dn: uid=titi,cn=titi,c=fr
objectclass: top
ref:http://test.html/uid=titi,cn=titi,c=fr
$
Comme ta variable contient des slashs, il faut changer le délimiteur de la commande "s" (substitution) de sed (dans l'exemple ci-dessous, j'ai utilisé des dièses (#) à la palce des slashs (/) :
$ URL="http://test.html/"
$ sed '/^dn/{h;N;x;s#dn: #ref:'"${URL}"'#;H;g}' plop
dn: uid=toto,cn=toto,c=fr
objectclass: top
ref:http://test.html/uid=toto,cn=toto,c=fr
dn: uid=tata,cn=tata,c=fr
objectclass: top
ref:http://test.html/uid=tata,cn=tata,c=fr
dn: uid=titi,cn=titi,c=fr
objectclass: top
ref:http://test.html/uid=titi,cn=titi,c=fr
$
zipe31
Messages postés
36316
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 545
30 sept. 2011 à 16:20
30 sept. 2011 à 16:20
/^dn/
Quand une ligne commence (^) par "dn"
{
Début groupement de commandes
h
On copie la ligne dans la mémoire secondaire en écrasant son éventuel contenu.
La mémoire principale contenant toujours la ligne commençant par "dn"
N
On ajoute la ligne suivante.
x
On échange le contenu des 2 mémoires (la principale et la secondaire)
s/dn:/ref:/
On substitue le motif
H
On ajoute le changement à la suite du contenu de la mémoire secondaire (qui contient toujours les 2 lignes)
g
On écrase le contenu de la mémoire principale par le contenu de la mémoire secondaire
}
Fin du regroupement de commandes
Quand une ligne commence (^) par "dn"
{
Début groupement de commandes
h
On copie la ligne dans la mémoire secondaire en écrasant son éventuel contenu.
La mémoire principale contenant toujours la ligne commençant par "dn"
N
On ajoute la ligne suivante.
x
On échange le contenu des 2 mémoires (la principale et la secondaire)
s/dn:/ref:/
On substitue le motif
H
On ajoute le changement à la suite du contenu de la mémoire secondaire (qui contient toujours les 2 lignes)
g
On écrase le contenu de la mémoire principale par le contenu de la mémoire secondaire
}
Fin du regroupement de commandes
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
30 sept. 2011 à 16:31
30 sept. 2011 à 16:31
Lorsque j'utilise ta commande j'obtiens ceci:
ref:http://test.html/[ESPACE]uid=titi,cn=titi,c=fr
Comment y remédier ?
ref:http://test.html/[ESPACE]uid=titi,cn=titi,c=fr
Comment y remédier ?
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
30 sept. 2011 à 16:36
30 sept. 2011 à 16:36
C'est bon j'ai réglé le problème.
Merci pour toute ton aide.
Merci pour toute ton aide.