Chaîne de caractères avec sed ou autre
Fermé
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
-
10 déc. 2012 à 16:57
ced66666 Messages postés 19 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 13 décembre 2012 - 13 déc. 2012 à 20:31
ced66666 Messages postés 19 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 13 décembre 2012 - 13 déc. 2012 à 20:31
A voir également:
- Chaîne de caractères avec sed ou autre
- Caractères ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Plus de chaine tv - Guide
21 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 17:04
10 déc. 2012 à 17:04
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) ?
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) ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 17:15
10 déc. 2012 à 17:15
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.......... $
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 19:26
10 déc. 2012 à 19:26
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 19:33
10 déc. 2012 à 19:33
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.
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.
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
Modifié par ced66666 le 10/12/2012 à 20:20
Modifié par ced66666 le 10/12/2012 à 20:20
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
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
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:06
10 déc. 2012 à 22:06
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
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
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:18
10 déc. 2012 à 22:18
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 22:25
10 déc. 2012 à 22:25
Fais une copie de ton fichier, puis lance cette commande :
Voila ce que ça devrait faire :
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.......... $
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:34
10 déc. 2012 à 22:34
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 22:37
10 déc. 2012 à 22:37
je me retrouve toujours avec quelques lignes non traitées.
Euh... sans voir les lignes en elle-même afin d'identifier la cause, difficile de se faire une idée du pourquoi ;-(
Euh... sans voir les lignes en elle-même afin d'identifier la cause, difficile de se faire une idée du pourquoi ;-(
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:53
10 déc. 2012 à 22:53
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 22:55
10 déc. 2012 à 22:55
Pour ajouter un espace où ?
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:56
10 déc. 2012 à 22:56
ah désolé, ajouter un espace en début de ligne
>x400
résultat
> x400
c'est possible ?
>x400
résultat
> x400
c'est possible ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 22:57
10 déc. 2012 à 22:57
Oui.
Par contre le chevron (>) fait partie de la ligne ?
Par contre le chevron (>) fait partie de la ligne ?
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 22:58
10 déc. 2012 à 22:58
nan nan le chevon ne fait pas partie de ligne,
j'aurai du symboliser l'environnement linux comme ceci $
$x400
$ x400
j'aurai du symboliser l'environnement linux comme ceci $
$x400
$ x400
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
10 déc. 2012 à 23:01
10 déc. 2012 à 23:01
$ echo -e "${A}" x400 blabla x500 bli bli x600 bloblo $ echo -e "${A}" | sed '/^x[45]00/{s/^/ /}' x400 blabla x500 bli bli x600 bloblo $
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
10 déc. 2012 à 23:03
10 déc. 2012 à 23:03
merci beaucoup,
demain je vais essayer ta commande et je te dirais si c'est ok.
Bonne soirée
demain je vais essayer ta commande et je te dirais si c'est ok.
Bonne soirée
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
11 déc. 2012 à 20:23
11 déc. 2012 à 20:23
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
11 déc. 2012 à 22:20
11 déc. 2012 à 22:20
sed 's/^mail=.*/&\n/' fichier
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
12 déc. 2012 à 07:23
12 déc. 2012 à 07:23
En y repensant, y'a plus simple :
sed '/^mail=/{G}' fichier;-))
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
12 déc. 2012 à 11:46
12 déc. 2012 à 11:46
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ù?
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ù?
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
12 déc. 2012 à 11:48
12 déc. 2012 à 11:48
fausse alerte, ça marche très bien, j'avais mis un mail= au lieu de mail:
Merci pour ton aide
Merci pour ton aide
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
12 déc. 2012 à 11:51
12 déc. 2012 à 11:51
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
peux tu me dire comment supprimer dans ce même fichier avec sed
toutes les lignes commençant par textEncodedORAAddres:
Merci pour ton aide
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
12 déc. 2012 à 11:54
12 déc. 2012 à 11:54
sed '/^textEncodedORAAddres:/d' fichier
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
12 déc. 2012 à 11:55
12 déc. 2012 à 11:55
Et avant les prochaines questions : FAQ - SED ;-))
Swiss Knight
Messages postés
1956
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
27 juillet 2016
110
12 déc. 2012 à 21:01
12 déc. 2012 à 21:01
Salut, sais-tu s'il existe le même genre de pages pour awk ?
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
12 déc. 2012 à 20:15
12 déc. 2012 à 20:15
ok pas de soucis.
Merci beaucoup pour toutes ces réponses rapides et efficaces.
Bonne soirée
Merci beaucoup pour toutes ces réponses rapides et efficaces.
Bonne soirée
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
12 déc. 2012 à 20:48
12 déc. 2012 à 20:48
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 ?
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 ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
12 déc. 2012 à 22:45
12 déc. 2012 à 22:45
sed '/^dn:.*/{s//\n&/}' fich
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
13 déc. 2012 à 17:43
13 déc. 2012 à 17:43
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
13 déc. 2012 à 17:47
13 déc. 2012 à 17:47
j'ai du mal à faire fusionner toutes chaines commençant par "x400:" ou "x500" la ligne précédente.
Hein ? ;-((
Hein ? ;-((
ced66666
Messages postés
19
Date d'inscription
lundi 10 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2012
13 déc. 2012 à 18:14
13 déc. 2012 à 18:14
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
13 déc. 2012 à 18:29
13 déc. 2012 à 18:29
textORAENCODED:
D'où il sort lui ???
D'où il sort lui ???
sed 'N;/\nx[45]00/{s/\n/ /}' fichier