Shell, tester une ligne dans une boucle IF

Résolu/Fermé
Albator - 22 févr. 2008 à 12:23
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 24 mars 2008 à 18:45
Bonjour,

Je souhaiterais, dans un script Shell, lire un fichier ligne par ligne
vérifier, pour chaque ligne, si elle commence par une chaîne
si c'est le cas modifier la ligne sinon afficher la ligne...
mais je n'arrive pas à tester le début de chaque ligne

voici ce que j'ai fait :

#! /bin/bash
cat /tmp/ATM-C2I.ldif|while read ligne
do
if [ $ligne = `grep ^anruid` ]
then
echo -e "changetype: modify\nreplace: anruid\n$ligne\n"
else
echo $ligne
fi
done
******************************
contenu du fichier /tmp/ATM-C2I.ldif

dn: uid=TRIBOULET,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
anruid: 0501341507012700014
site: 0000141507012700014

dn: uid=LHOTE,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
anruid: 0502041507012700014
site: 0000141507012700014

et le résultat que je souhaiterais obtenir :

dn: uid=TRIBOULET,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
changetype: modify
replace: anruid
anruid: 0501341507012700014
site: 0000141507012700014

dn: uid=LHOTE,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
changetype: modify
replace: anruid
anruid: 0502041507012700014
site: 0000141507012700014


Par avance, merci
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
22 févr. 2008 à 13:37
Salut,
sed '/anruid/ i\changetype: modify\nreplace: anruid'
;-))
1
je ne sais pas si c'est un problème de version de SED... je suis sous SUN 5.9
mais j'obtiens ceci :

# sed 's/anruid/ i\changetype: modify\nreplace: anruid/g' ATM-C2I.ldif

dn: uid=TRIBOULET,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
ichangetype: modifynreplace: anruid: 0501341507012700014
site: 0000141507012700014

je n'ai pas (encore) trouvé l'option de SED qui permettrait d'interpréter les \n
grrr !!!
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545 > Albator
22 févr. 2008 à 14:06
Il n'y a pas de s au début et de g à la fin

/anruid/ signifie qu'on cherche le motif anruid au début
ensuite i\ insère la ligne avant.

Mais je pense que tu as quand même le problème de \n

0
Albator > Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010
22 févr. 2008 à 14:10
je les ai ajouté car sans, la commande me retourne :
sed: command garbled: anruid/ i\changetype: modify\nreplace: anruid

moi pas comprendre :(
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > Albator
22 févr. 2008 à 15:53
je n'ai pas (encore) trouvé l'option de SED qui permettrait d'interpréter les \n

Dans ce cas là, écrit ta syntaxe sur plusieurs lignes :
sed '/anruid/ i\changetype: modify\
replace: anruid
' fichier
;-))
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
22 févr. 2008 à 12:40
Bonjour, c'est réalisable directement via la fonction sed

Darkito >cat totof
dn: uid=TRIBOULET,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
anruid: 0501341507012700014
site: 0000141507012700014

dn: uid=LHOTE,ou=utilisateurs,o=urcam,dc=cnamts,anruiddc=fr
anruid: 0502041507012700014
site: 0000141507012700014 
Darkito >sed 's@^anruid@changetype: modify\nreplace: anruid\nanruid@g' totof
dn: uid=TRIBOULET,ou=utilisateurs,o=urcam,dc=cnamts,dc=fr
changetype: modify
replace: anruid
anruid: 0501341507012700014
site: 0000141507012700014

dn: uid=LHOTE,ou=utilisateurs,o=urcam,dc=cnamts,anruiddc=fr
changetype: modify
replace: anruid
anruid: 0502041507012700014
site: 0000141507012700014 


J'ai ajouté un "anruid" dans le fichier test pour vérifier que ça ne prenait que les débuts de ligne.
0
Merci,

Par contre chez moi, je n'obtiens pas le même résultat que toi

dn: uid=TRIBOULET-05013,ou=utilisateurs,o=urcam-bourgogne,dc=cnamts,dc=fr
changetype: modifynreplace: anruidnanruid: 0501341507012700014
site: 0000141507012700014
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545 > Albator
22 févr. 2008 à 13:15
Il y a un problème avec les \n ....
J'ai pas un 'sed' classique au boulot...
essaie en ajoutant "-e"
sed -e 's@^anruid@changetype: modify\nreplace: anruid\nanruid@g'

je ne sais pas du tout si ça vient de là...
0
non, le -e n'y change rien
mais la commande SED est une très bonne piste
merci encore
0
Darkito Messages postés 1191 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 26 mai 2010 545
22 févr. 2008 à 13:31
C'est clair que sed est très (très) utile.
Il y a Jipicy qui est sur CCM et qui connait très bien cette fonction.
Je vais essayer de voir avec lui d'où viens le problème.
0
Problème Résolu

Je n'ai pas trouvé de solution avec SED, je suis donc revenu à mon idée initiale
voici mon contournement :

while read ligne
do
echo $ligne|grep ^anruid >/dev/null
if [ $? -eq 0 ]
then
echo -e "changetype: modify\nreplace: anruid\n$ligne"
else
echo $ligne
fi
done</tmp/ATM-C2I.ldif

merci francky pour ta solution
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bobtipitt Messages postés 61 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 16 août 2010 2
24 mars 2008 à 17:14
Moi je dis que ce code est faux
il y a surement
une autre
manière de
le faire plus
simplement
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 mars 2008 à 17:24
Dans ce cas on attend d'être éclairé par tes lumières...

Merci d'avance ;-)
0
bobtipitt Messages postés 61 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 16 août 2010 2
24 mars 2008 à 18:31
Lol mais je sais que si sa marche c le bon
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 mars 2008 à 18:45
On attend toujours !!!
0