Unix sed
Résolu
remousse
Messages postés
299
Date d'inscription
Statut
Membre
Dernière intervention
-
remousse Messages postés 299 Date d'inscription Statut Membre Dernière intervention -
remousse Messages postés 299 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà mon problème j'ai un fichier de ce type:
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
J'aimerai ajouter une ligne à ce fichier de sorte qu'il soit ainsi:
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
dn: uid=titi,cn=titi,c=fr
Pour le moment en utilisant sed j'obtiens ceci:
dn: uid=toto,cn=toto,c=fr
objectclass: top
ref: uid=toto,cn=toto,c=fr
ref: uid=tata,cn=tata,c=fr
dn: uid=titi,cn=titi,c=fr
dn: uid=tata,cn=tata,c=fr
objectclass: top
ref: uid=tata,cn=tata,c=fr
ref: uid=toto,cn=toto,c=fr
dn: uid=titi,cn=titi,c=fr
dn: uid=titi,cn=titi,c=fr
objectclass: top
dn: uid=titi,cn=titi,c=fr
ref: uid=tata,cn=tata,c=fr
ref: uid=toto,cn=toto,c=fr
Je ne vois pas comment faire pour avoir le résultat attendu.
Par avance merci.
Voilà mon problème j'ai un fichier de ce type:
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
J'aimerai ajouter une ligne à ce fichier de sorte qu'il soit ainsi:
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
dn: uid=titi,cn=titi,c=fr
Pour le moment en utilisant sed j'obtiens ceci:
dn: uid=toto,cn=toto,c=fr
objectclass: top
ref: uid=toto,cn=toto,c=fr
ref: uid=tata,cn=tata,c=fr
dn: uid=titi,cn=titi,c=fr
dn: uid=tata,cn=tata,c=fr
objectclass: top
ref: uid=tata,cn=tata,c=fr
ref: uid=toto,cn=toto,c=fr
dn: uid=titi,cn=titi,c=fr
dn: uid=titi,cn=titi,c=fr
objectclass: top
dn: uid=titi,cn=titi,c=fr
ref: uid=tata,cn=tata,c=fr
ref: uid=toto,cn=toto,c=fr
Je ne vois pas comment faire pour avoir le résultat attendu.
Par avance merci.
A voir également:
- Unix sed
- Fichier executable unix ✓ - Forum MacOS
- Sed - Astuces et Solutions
- Les documents sur ma clé usb transformés en fichiers unix - Forum MacOS
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? ✓ - Forum Linux / Unix
- Formation ibm aix unix ✓ - Forum Linux / Unix
3 réponses
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
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 $
;-))
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}'???
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
$
/^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