Remplacement caractère fichiers CSH

Résolu/Fermé
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012 - 22 août 2012 à 09:53
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012 - 22 août 2012 à 10:41
Bonjour,

Je viens de poser une question dans un autre post pour le remplacement d'un caractère dans un fichier sur une ligne particulière. J'ai eu la réponse, ça marchait bien :

https://forums.commentcamarche.net/forum/affich-25896692-remplacement-caractere-fichiers#p25896823

Or, je travaille en csh, et quand j'ai voulu taper la même commande en csh que celle que je tapais dans mon terminale (donc en sh) (sed '/texte/ {s/chaine_a_remplacer/nouvelle_chaine/}' fichier.txt), cela ne fonctionne plus.

Quelle est la subtilité?

Merci beaucoup!!

2 réponses

zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 571
22 août 2012 à 09:57
Salut,

Le shell n'a rien à voir avec ton problème dans la mesure où c'est "sed" qui fait le travail.

Peut être serait-il bien que tu précises ton système ainsi que la version de "sed".
0
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012
22 août 2012 à 10:02
Merci.

- La version de sed est la version 4.2.1 (j'ai fait "man sed" pour voir ça).
- Concernant mon système, je travaille sous linux GNOME. Je ne sais pas quelle information tu veux avoir en particulier...
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 571
22 août 2012 à 10:07
Linux Gnome ce n'est pas un système, Linux est un noyau et Gnome un bureau graphique ;-(

Quelle distribution ? Ubuntu ? Debian ? Fedora ? etc.

Sinon il n'y a pas de raison que ça ne marche pas avec "csh", la preuve :

$ csh

% sed '/texte/ {s/chaine_a_remplacer/nouvelle_chaine/}' plop
...
blablabla : chaine_a_remplacer
texte : nouvelle_chaine
blablabla : chaine_a_remplacer
... 
% exit

$
0
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012
22 août 2012 à 10:31
Merci pour ta réponse. Désolé, je ne suis pas trop calé en informatique. Ma distribution est debian...

Mais je pense avoir trouvé la source de mon problème! En fait, je tape la commande :

set arg1 = 'chaine_a_remplacer'
set arg2 = 'nouvelle_chaine'
sed -e ' /texte/ {s/$arg1/$arg2/g}' fichier.txt

Cette commande ne fonctionne pas (avec les arguments $arg1 et $arg2). Remarque : Si je fais echo $arg1 et $arg2, les arguments sont bien définis.

En revanche, quand je tape :

sed -e ' /texte/ {s/chaine_a_remplacer/nouvelle_chaine/g}' fichier.txt

ça marche. Autrement dit, quand je n'utilise pas de variable avec les "$". Tu aurais une idée?
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 571
Modifié par zipe31 le 22/08/2012 à 10:42
Ben voila quand on explique clairement son problème on y voit bien mieux ;-)

Ton problème vient des variables qui ne sont pas interprétées dans l'expression à cause des quotes simples qui l'entourent ;-(

Deux solutions :
- Soit tu entoures l'expression avec des quotes doubles :
sed -e " /texte/ {s/$arg1/$arg2/g}" fichier.txt 

- Soit tu laisses les quotes simples, mais il faut à ce moment là sortir de l'expression et re-rentrer par la suite :
sed -e ' /texte/ {s/'"$arg1"'/'"$arg2"'/g}' fichier.txt 
0
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012
22 août 2012 à 10:41
Trop fort. Ça marche! Merci beaucoup zipe. La prochaine fois, j'expliquerai mieux le problème à la base :-)

Bonne journée!
0