trouver et remplacer [csh] - C - Programmation
Marsh Posté le 29-09-2006 à 15:23:07
in_your_phion a écrit : bonjour, |
Déjà ce n'est pas du C mais du shell (même du C-shell reste du shell) - T'as une rubrique pour ça.
Ensuite, si tu nous montrais ce que t'as fait en script on pourrait mieux comprendre. Par exemple si t'as mis des guillemets simples ou doubles, la gestion des caractères spéciaux n'est pas la même.
Essaye ça (jle fais de tête)
Citation : #!/bin/sh |
Si ça marche pas, protège les parenthèses par des backslashes
Citation : sed -e "s/4 * atan\(1\)/\(4 * atan \(1\)\)/g" "$file" >tmp |
Marsh Posté le 01-10-2006 à 13:34:33
Salut,
C'est bien sed qu'il faut que tu utilises.
$ echo 'foobar4*atan(1)bar4*atan(1)baz' > test-sed
$ sed -s 's/4*atan(1)/(4*atan(1))/g' < test-sed
foobar4*(4*atan(1))bar4*(4*atan(1))baz
$
Marsh Posté le 01-10-2006 à 13:36:28
Ah, et puis pour la récursion ça donnerait quelque chose comme :
$ for i in `find .`; do sed -s 's/4*atan(1)/(4*atan(1))/g' < "$i" > tmp; mv tmp "$i";done
Cela dit je n'ai pas testé, donc attention. ;-)
Marsh Posté le 01-10-2006 à 13:39:29
Mince je raconte n'importe quoi, for n'existe pas en csh... :-/
Tu n'as pas accès à un vrai (Bourne) shell (bash, zsh) ?
Marsh Posté le 01-10-2006 à 16:53:02
Zavie a écrit : Ah, et puis pour la récursion ça donnerait quelque chose comme : |
Attention à la syntaxe "for var in `commande`" car si "commande" renvoie une info avec un espace, le "for" découpera l'info en 2 itérations. Chaque itération n'ayant qu'une partie de l'info ne fonctionnera pas et l'info ne sera pas traitée...
Mieux vaut préférer la syntaxe "commande |while read var" car le read arrête sa lecture au "return"
Zavie a écrit : Mince je raconte n'importe quoi, for n'existe pas en csh... :-/ |
Boaf il y a probablement son équivalent
Zavie a écrit : Tu n'as pas accès à un vrai (Bourne) shell (bash, zsh) ? |
Marsh Posté le 04-10-2006 à 15:40:51
Zavie a écrit : Mince je raconte n'importe quoi, for n'existe pas en csh... :-/ |
coucou,
si en fait je pensais que csh était bien ?
Marsh Posté le 09-10-2006 à 18:19:02
Zavie a écrit : le standard c'est quand même d'être compatible Bourne. |
Ya rien qui oblige car chaque script s'exécute dans l'environnement qui lui est défini par sa première ligne
#! <chemin_vers interpréteur> |
Donc même si tu bosses en bash, tu pourras parfaitement exécuter un script csh (pour peu qu'il possède cette fameuse ligne)...
Marsh Posté le 10-10-2006 à 11:57:36
Citation : Ya rien qui oblige car chaque script s'exécute dans l'environnement qui lui est défini par sa première ligne
|
Je ne dis pas le contraire, seulement le standard c'est le shell Bourne (sh dans un script, bash ou zsh dans un terminal histoire d'avoir un minimum de confort). Quand je lance un grep dans /etc/init.d sur une Debian classique, j'ai une énorme majorité de /bin/sh, quelques /bin/bash, et aucun csh.
Autant utiliser les outils standards, et surtout, pourquoi se galérer avec un shell antédiluvien pour réaliser une opération de tous les jours sur son arborescence ?
Marsh Posté le 29-09-2006 à 12:06:56
bonjour,
je voudrais trouver dans tous mes sous dossier les fichiers qui contiennent la chaine "4*atan(1)" et les remplacer par la chaine "(4*atan(1))" ...est ce que c'est possible de faire ca en shell script ??? J'ai essayé avec sed mais les parenthèse posent pb apparement
merci par avance