Commande sed pour remplacer du texte
Résolu/Fermé
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
-
17 juin 2016 à 20:04
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 23 déc. 2016 à 10:16
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 23 déc. 2016 à 10:16
A voir également:
- 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) ?
- Remplacez le mot eget par le mot désire dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Piratage facebook changer mot de passe - Guide
- Le fichier à télécharger est la nouvelle note de service de votre entreprise. importez ce fichier dans le bon dossier sur l'espace pix cloud. donnez à ce fichier les mêmes droits d'accès que les autres notes de service. ✓ - Forum Windows
- Comptage des caractères dans Word ✓ - Forum Word
- Si la cellule contient le mot alors ✓ - Forum Excel
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
17 juin 2016 à 20:13
17 juin 2016 à 20:13
Salut;
sed -i.bak '/Sauvegarde/{s/^[^ ]*/80.119.80.109/}' /etc/hosts
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
17 juin 2016 à 20:26
17 juin 2016 à 20:26
Merci Zipe31. C'est toujours toi le grand spécialiste de bash....
Bonne soirée.
Bonne soirée.
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
28 juin 2016 à 22:08
28 juin 2016 à 22:08
1 ligne de hosts est décomposée ainsi:
Je pense que tout le problème consiste a inséré le TAB.
il parait qu'il y aurait plusieurs SED et ceux-ci ne gèrent pas tous le '\t'
http://sed.sourceforge.net/sed1line_fr.html
IP + TAB + hostname
Je pense que tout le problème consiste a inséré le TAB.
il parait qu'il y aurait plusieurs SED et ceux-ci ne gèrent pas tous le '\t'
http://sed.sourceforge.net/sed1line_fr.html
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
>
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
28 juin 2016 à 22:19
28 juin 2016 à 22:19
sed '/Sauvegarde/{s/[^\t]*/80.119.80.109/}' /etc/hosts
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
Modifié par thierryR51 le 29/06/2016 à 23:12
Modifié par thierryR51 le 29/06/2016 à 23:12
J'ai adapté à mes variables. En fait ça n'écrit rien. Je n'ai que la relecture de mon fichier.
ou $nameServeur = MaMaison
$newIp=80.119.80.109
$filehosts= /etc/hosts
Est ce le fait que la ligne contenant 'MaMaison' n'existe plus dans mon fichier.
En fait, je voudrais:
Si la ligne existe: La remplacer
Si elle n'existe pas: La créer.
Merci pour ton aide. C'est compliqué la commande sed...
sed '/'${nameServeur}'/{s/^[^\t]*/'${newIp}'/}' $filehosts
ou $nameServeur = MaMaison
$newIp=80.119.80.109
$filehosts= /etc/hosts
Est ce le fait que la ligne contenant 'MaMaison' n'existe plus dans mon fichier.
En fait, je voudrais:
Si la ligne existe: La remplacer
Si elle n'existe pas: La créer.
Merci pour ton aide. C'est compliqué la commande sed...
UnGnU
Messages postés
1158
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
157
>
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
30 juin 2016 à 13:40
30 juin 2016 à 13:40
Salut,
Un exemple de fichier hosts sans l'entrée MaMaison
Un exemple avec les 2 entrées
Le fichier de script pour sed :
Le script exécuté sur le fichier sans occurrence de MaMaison :
Le script exécuté sur le fichier ayant déjà les 2 occurrences
Un exemple de fichier hosts sans l'entrée MaMaison
$ cat mon_fich_hosts
80.119.80.108 Sauvegarde
Un exemple avec les 2 entrées
$ cat mon_fich_maison
80.119.80.108 Sauvegarde
192.168.10.1 MaMaison
Le fichier de script pour sed :
$ cat script.sed
/Sauvegarde/{
s/[^\t]*/80.119.80.109/
}
/MaMaison/{
s/[^\t]*/192.168.10.2/
b
}
$ {
a\192.168.10.2\tMaMaison
}
Le script exécuté sur le fichier sans occurrence de MaMaison :
$ sed -f script.sed mon_fich_hosts
80.119.80.109 Sauvegarde
192.168.10.2 MaMaison
Le script exécuté sur le fichier ayant déjà les 2 occurrences
$ sed -f script.sed mon_fich_maison
80.119.80.109 Sauvegarde
192.168.10.2 MaMaison
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
30 juin 2016 à 21:28
30 juin 2016 à 21:28
OK, je vois qu'avec sed la solution existe. Donc pour intégrer cela dans mon script, j'ai fais ceci. Je n'ai pas de 2e fichier sed. J'intègre tout dans mon script.
Le retour de la commande est
Comme tu le vois c'est bloquant. J'ai du terminer le script manuellement. Visiblement, le ";" ne semble pas être pris en compte. Pourtant j'ai suivi les conseils de https://openclassrooms.com/courses/la-commande-sed où ils disent bien que pour une commande uniligne, on sépare avec des ";"
Aurais je mal compris ?
sed -e '/'${nameServeur}'/{s/^[^\t]*/'${newIp}'/}';$ '{a\'${newIp}'\t'${nameServeur}'}' $filehosts
Le retour de la commande est
+ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.130/}'
^C
Comme tu le vois c'est bloquant. J'ai du terminer le script manuellement. Visiblement, le ";" ne semble pas être pris en compte. Pourtant j'ai suivi les conseils de https://openclassrooms.com/courses/la-commande-sed où ils disent bien que pour une commande uniligne, on sépare avec des ";"
Aurais je mal compris ?
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
23 déc. 2016 à 00:21
23 déc. 2016 à 00:21
Petit souci. Quand sed veut écrire
alors que la ligne n'existe pas dans le fichier hosts, il n'y met rien.
Je vois bien que b est sans les ' mais dans le script, ils y sont. C'est dans le résultat de la commande qu'ils disparaissent. J'ai donc remplacé les ' par des " mais rien n'y fait non plus. Serait ce la cause de la non écriture ?
Merci.
sed -i -e '/MaMaison/{s/^[^\t]*/86.66.183.119/}' -e b -e '$ a\86.66.183.119\tMaMaison' /etc/hosts
alors que la ligne n'existe pas dans le fichier hosts, il n'y met rien.
Je vois bien que b est sans les ' mais dans le script, ils y sont. C'est dans le résultat de la commande qu'ils disparaissent. J'ai donc remplacé les ' par des " mais rien n'y fait non plus. Serait ce la cause de la non écriture ?
Merci.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
23 déc. 2016 à 09:53
23 déc. 2016 à 09:53
Salut,
Essaye comme ça :
Essaye comme ça :
sed -i -e '/MaMaison/{s/^[^\t]*/86.66.183.119/;b}' -e '$ a\86.66.183.119\tMaMaison' /etc/hosts
thierryR51
Messages postés
139
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
22 juin 2021
8
23 déc. 2016 à 10:10
23 déc. 2016 à 10:10
Effectivement, le post 29 fait également mention de la même chose et je t'avais répondu après. Ça fonctionne mais pas bien. Peut être faut-il faire 2 ligne sed avec une condition "if" ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
23 déc. 2016 à 10:16
23 déc. 2016 à 10:16
Pourtant…
L'entrée "MaMaison" n'existe pas et elle est rajoutée :
L'entrée "MaMaison" existe et elle est modifiée :
L'entrée "MaMaison" n'existe pas et elle est rajoutée :
$ cat hosts
80.119.80.108 Sauvegarde
$ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.119/;b}' -e '$ a\86.66.183.119\tMaMaison' hosts
80.119.80.108 Sauvegarde
86.66.183.119 MaMaison
L'entrée "MaMaison" existe et elle est modifiée :
$ cat maison
80.119.80.108 Sauvegarde
192.168.10.1 MaMaison
$ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.119/;b}' -e '$ a\86.66.183.119\tMaMaison' maison
80.119.80.108 Sauvegarde
86.66.183.119 MaMaison
17 juin 2016 à 23:51
j'obtiens 1 erreur sur le 1er caractère.
Il me semble pourtant avoir bien écrit....
18 juin 2016 à 07:40
18 juin 2016 à 09:41
18 juin 2016 à 09:49
mais il est encore là.
18 juin 2016 à 09:50