Chaîne de caractères avec sed ou autre
ced66666
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
ced66666 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
ced66666 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je dois faire quelque traitement sur un fichier ldif pour récupérer les informations sur un AD.
En exécutant ma commande ldifde pour importer mes objets, j'ai une erreur de syntaxe......
En regardant un peu,
j'ai une ligne avec
proxyAddresses:
x400:C=toto:A=tata:P=coucou..........
pour que la commande ldifde fonctionne, la ligne doit être la suivante
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
c'est un vrai problème car le fichier comporte 2000 objets à importer.Je ne peux pas le faire manuellement
Avez-vous une idée pour réaliser ce genre de traitement c'est à dire fusionner les deux lignes pour obtenir qu'une seule ligne avec un espace entre proxyAddresses: et x400:C=toto:A=tata:P=coucou..........
pour obtenir
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
je précise que le traitement ne doit se faire que sur les lignes
proxyAddresses: x400.........
j'ai essayé avec la commande sed mais je n'y arrive pas. Avez-vous une autre idée s'il vous plaît pour réaliser ce genre de traitement.
Merci par avance.
je dois faire quelque traitement sur un fichier ldif pour récupérer les informations sur un AD.
En exécutant ma commande ldifde pour importer mes objets, j'ai une erreur de syntaxe......
En regardant un peu,
j'ai une ligne avec
proxyAddresses:
x400:C=toto:A=tata:P=coucou..........
pour que la commande ldifde fonctionne, la ligne doit être la suivante
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
c'est un vrai problème car le fichier comporte 2000 objets à importer.Je ne peux pas le faire manuellement
Avez-vous une idée pour réaliser ce genre de traitement c'est à dire fusionner les deux lignes pour obtenir qu'une seule ligne avec un espace entre proxyAddresses: et x400:C=toto:A=tata:P=coucou..........
pour obtenir
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
je précise que le traitement ne doit se faire que sur les lignes
proxyAddresses: x400.........
j'ai essayé avec la commande sed mais je n'y arrive pas. Avez-vous une autre idée s'il vous plaît pour réaliser ce genre de traitement.
Merci par avance.
21 réponses
- 1
- 2
Suivant
Résumé de la discussion
Le problème porte sur la fusion automatique des lignes proxyAddresses dans un fichier LDIF destiné à ldifde, afin d'obtenir une seule ligne proxyAddresses: x400:… et d'éviter une erreur de syntaxe lors de l'import. Des réponses suggèrent de fusionner les lignes x400 et x500, et d'envisager que les lignes suivantes commencent par xnnn, tout en testant l'usage de sed et en s'interrogeant sur la casse. La discussion évoque aussi des variantes comme l'ajout d'espaces en début de ligne ou l'insertion de lignes vides pour séparer les blocs LDIF, et des ambiguïtés autour de proxyAddresses et textEncodedORAddress.
-
Salut,
je précise que le traitement ne doit se faire que sur les lignes
proxyAddresses: x400........
Pourquoi, il y a des lignes qui diffèrent ? A quel niveau (x400) ?
-
J'anticipe...
$ cat plop proxyAddresses: x400:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... $ sed '/^proxyAddresses:/{N;/\nx400/{s/\n/ /}}' plop proxyAddresses: x400:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... $
-
merci
oui j'ai des lignes qui diffèrent. J'ai donné x400 pour exemple, j'ai regardé dans mon fichier, j'ai le même soucis avec le x500 en début de ligne aussi
Si je veux faire un traitement en masse c'est à dire x400 et x500 et autre, est ce que la commande sed fera l'affaire ?
C'est quoi la syntaxe si je suis avec l'éditeur vim
j'ai l'habitude de faire
:1;$ sed/.............................//g
Merci pour ton aide-
oui j'ai des lignes qui diffèrent. J'ai donné x400 pour exemple, j'ai regardé dans mon fichier, j'ai le même soucis avec le x500 en début de ligne aussi
Le problème est de savoir si il faut traiter toutes les lignes commençant par "proxyAddresses:" d'une part et ensuite si toutes les lignes qui suivent doivent être ajoutées et le cas échéant s'il faut s'assurer que la ligne à remonter doit commencer par "xnnn" sans tenir compte des "nnn" ???
Avec vim je ne sais pas, mais avec "sed" oui, d'autant qu'il est vraiment fait pour ce genre de traitement.
-
-
oui effectivement, c'est bien ça:
il faut traiter toutes les lignes commençant par "proxyAddresses:" et la ligne suivante à remonter commence par x500 ou x400.
désolé, chui vraiment pas une bête avec ce genre de traitement.
Merci -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
J'ai essayé la commande comme ceci:
sed -i '/^proxyAddresses:/{N;/\nx400/{s/\n/ /}}' monfichier.ldf
la commande traite quelques lignes car j'ai encore des lignes qui commence par sous la forme:
proxAddresses:
x400:.............................
pourquoi la commande ne traite que quelques lignes et pas toutes les lignes ?
c pas évident -
sinon est ce que tu peux si je raisonne comme ceci:
toutes les lignes commençant par x400 ou x500, je le la fusionne avec la ligne précédente pour obtenir le même résultat comme ceci
proxyAddresses: x400:C=toto:A=tata:P=coucou -
Fais une copie de ton fichier, puis lance cette commande :
sed -i '/^proxyAddresses:/{N;/\nx[45]00/{s/\n/ /}}' fichier
Voila ce que ça devrait faire :
$ cat plop proxyAddresses: x400:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... proxyAddresses: x600:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... $ sed -i '/^proxyAddresses:/{N;/\nx[45]00/{s/\n/ /}}' plop $ cat plop proxyAddresses: x400:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... proxyAddresses: x600:C=toto:A=tata:P=coucou.......... proxyAddresses: x500:C=toto:A=tata:P=coucou.......... $
-
en exécutant sed -i '/^proxyAddresses:/{N;/\nx[45]00/{s/\n/ /}}' fichier
je me retrouve toujours avec quelques lignes non traitées.
As-tu la solution si je raisonne avec toutes les lignes commençant par x400 ou x500 -
oui je comprends,
demain je t'en verrai ca.
sinon peux tu me donner la syntaxe avec la commande sed pour ajouter un espace pour toutes les lignes qui comment par x500 ou x400 s'il te plaît ?
Je te remercie par avance -
ah désolé, ajouter un espace en début de ligne
>x400
résultat
> x400
c'est possible ? -
nan nan le chevon ne fait pas partie de ligne,
j'aurai du symboliser l'environnement linux comme ceci $
$x400
$ x400 -
merci beaucoup,
demain je vais essayer ta commande et je te dirais si c'est ok.
Bonne soirée -
j'ai essayé la commande est le résultat est correct, merci beaucoup.
J'aurai une question à te poser, toujours avec sed, est ce qu'il est possible de rajouter une une ligne vide entre deux blocs, je m'explique
voici la structure de mon fichier ldif
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
mail= toto@tata.fr
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
mail=essai@comment.com
je voudrais rajouter une ligne vide juste après l'attribut mail pour séparer le premier bloc et le second bloc et ainsi de suite pour obtenir le résultat suivant
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
mail= toto@tata.fr
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
mail=essai@comment.com
merci par avance pour ton aide -
salut,
j'ai essayé les deux commandes que tu m'as donné
sed 's/^mail=.*/&\n/' fichier
sed '/^mail=/{G}' fichier
et dans mon fichier, je n'ai pas de changement, il n'y pas de ligne vide entre les deux blocs.
le soucis vient d'où? -
fausse alerte, ça marche très bien, j'avais mis un mail= au lieu de mail:
Merci pour ton aide -
toujours dans la même idée
peux tu me dire comment supprimer dans ce même fichier avec sed
toutes les lignes commençant par textEncodedORAAddres:
Merci pour ton aide -
ok pas de soucis.
Merci beaucoup pour toutes ces réponses rapides et efficaces.
Bonne soirée -
Là j'ai cherché sur le FAQ et je n'ai pas trouvé la réponse.
Je me posais la question comment ajouter une ligne vide juste avant la chaîne de caractère trouvée.
je voudrais ajouter une ligne vide pour séparer les deux blocs mais en raisonnant différemment car j'ai constaté qu'en traitant mon fichier ldif, les deux blocs ne sont pas séparés car certain bloc ne se termine pas par mail=toto@tata.fr et donc sed ne réalise pas l'opération car ca ne match pas.
Donc je raisonne dans l'autre sens c'est à dire toute chaîne commençant par
dn: CN=, ajouter une ligne vide au dessus pour donner ce résultat :
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
mail= toto@tata.fr
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
GivenName: allo allo allo
dn: CN=........................
changetype: add
objetclass:................................
blabla
blabla
blabla
GivenName: allo allo allo
mail=essai@comment.com
;) vi
début de commande
sed 's/^dn:.*//' comment dire ajouter une vide au dessus ?
Crois-tu que c'est faisable ? -
Bonjour,
merci pour votre réponse ça marche très bien.
j'ai du mal à faire fusionner toutes chaines commençant par
"x400:" ou "x500" la ligne précédente.
proxyAddresses:
x500:C=toto:A=tata:P=coucou..........
proxyAddresses:
x400:C=toto:A=tata:P=coucou..........
proxyAddresses:
X500:C=toto:A=tata:P=coucou........
pour obtenir ceci
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
proxyAddresses: X500:C=toto:A=tata:P=coucou..........
textORAENCODED: x500:C=toto:A=tata:P=coucou..........
.................................................................
sed -i '/^[xX][45]00:/ ;)...............': comment lui dire fusionne à la ligne précédente
Je commence à prendre goût à la manipulation des chaines de caractères, on voit bien la puissance sous Linux/Unix.
Je te remercie par avance-
j'ai du mal à faire fusionner toutes chaines commençant par "x400:" ou "x500" la ligne précédente.
Hein ? ;-((
-
-
désolé, j'ai écris trop vite:
j'ai du mal à fusionner toutes chaines commençant par
"x400:" ou "x500" à la ligne précédente. (faire remonter à la ligne du dessus).
Comme ceci:
proxyAddresses:
x500:C=toto:A=tata:P=coucou..........
proxyAddresses:
x400:C=toto:A=tata:P=coucou..........
proxyAddresses:
X500:C=toto:A=tata:P=coucou........
pour obtenir ceci
proxyAddresses: x400:C=toto:A=tata:P=coucou..........
proxyAddresses: X500:C=toto:A=tata:P=coucou..........
textORAENCODED: x500:C=toto:A=tata:P=coucou..........
.................................................................
Merci par avance
- 1
- 2
Suivant