Création
d'entreprise
Posez votre question Signaler

Unix sed [Résolu]

remousse 179Messages postés 2 novembre 2008Date d'inscription 21 mars 2012Dernière intervention - Dernière réponse le 30 sept. 2011 à 16:36
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.
Lire la suite 

Unix sed »

7 réponses
Réponse
+0
moins plus
Salut,

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

$

;-))
Ajouter un commentaire
Réponse
+0
moins plus
Parfait ça fonctionne très bien (même si je n'ai pas tout saisi à la commande)

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- 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
remousse- 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 ?
remousse- 30 sept. 2011 à 16:36
C'est bon j'ai réglé le problème.

Merci pour toute ton aide.
Ajouter un commentaire
Ce document intitulé « Unix sed » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?