Remplacer variable dans un fichier
JEROMAX
Messages postés
274
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un petit problème. j'effectue un traitement que je récupère dans une variable, cette variable contient du texte et des caractères spéciaux comme des retours chariot. Je souhaite faire une substitution dans un fichier mais ça ne fonctionne pas.
La commande que j'utilise est
La variable ${ROUTE} contient le résultat de
La commande sed retourne
Je tente d'utiliser sed mais n'importe quelle commande peut faire l'affaire du moment que cela fonctionne... :-)
Je me dit que c'est forcément possible mais je sèche...
Merci beaucoup à ceux qui se pencheront sur le problème.
J'ai un petit problème. j'effectue un traitement que je récupère dans une variable, cette variable contient du texte et des caractères spéciaux comme des retours chariot. Je souhaite faire une substitution dans un fichier mais ça ne fonctionne pas.
La commande que j'utilise est
sed -i -e "s|##ROUTE##|${ROUTE}|" ${FICHIER}
La variable ${ROUTE} contient le résultat de
netstat -rn(avec des retours chariot donc,
echo ${ROUTE}affiche bien ce qu'il faut).
La commande sed retourne
commande 's' inachevée
Je tente d'utiliser sed mais n'importe quelle commande peut faire l'affaire du moment que cela fonctionne... :-)
Je me dit que c'est forcément possible mais je sèche...
Merci beaucoup à ceux qui se pencheront sur le problème.
A voir également:
- Remplacer variable dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
hello
avec awk (mais on ne peut pas modifier directement le fichier)
avec awk (mais on ne peut pas modifier directement le fichier)
awk -v v="${ROUTE}" '{sub("##ROUTE##", v); print}' ${FICHIER}
Salut,
C'est clair que les retours à la ligne mettent le bronx ;-(
Mieux vaut passer directement la commande à sed grâce au flag
;-))
C'est clair que les retours à la ligne mettent le bronx ;-(
Mieux vaut passer directement la commande à sed grâce au flag
e:
$ cat brol
blablabla
##ROUTE##
blablabla
$ sed -i.bak 's|##ROUTE##|netstat -rn|e' brol
$ cat brol
blablabla
Table de routage IP du noyau
Destination Passerelle Genmask Indic MSS Fenêtre irtt Iface
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
blablabla
$
;-))
Salut tout le monde
Merci à tous de vous être penchés sur le problème :
- je ne peux pas utiliser la commande netstat directement car je vous ai donné une version très simplifiée de ce qui est réellement généré. En réalité, j'ai tout un tas de commandes derrière la variable ROUTE.
- Je n'ai malheureusement pas la dernière version de awk installée sur les machines donc je ne peux utiliser le "inplace"
- dubcek, ta commande
En mixant un peu toutes vos idées, j'ai réussi à faire fonctionner le bouzin :
bon je pense qu'il y a certainement (beaucoup) mieux mais c'est la seule commande qui marche...
En tout cas, merci beaucoup !
[ JEROMAX ]
Merci à tous de vous être penchés sur le problème :
- je ne peux pas utiliser la commande netstat directement car je vous ai donné une version très simplifiée de ce qui est réellement généré. En réalité, j'ai tout un tas de commandes derrière la variable ROUTE.
- Je n'ai malheureusement pas la dernière version de awk installée sur les machines donc je ne peux utiliser le "inplace"
- dubcek, ta commande
sed -i "s|##ROUTE##|awk 'BEGIN {print ENVIRON[\"ROUTE\"]}'|e" brolm'intéressait beaucoup mais je n'arrive pas à la faire fonctionner, il ne récupère pas le contenu de ${ROUTE}
En mixant un peu toutes vos idées, j'ai réussi à faire fonctionner le bouzin :
echo "$(awk -v v="${ROUTE}" '{sub("##ROUTE##", v); print}' ${FICHIER})" > ${FICHIER}
bon je pense qu'il y a certainement (beaucoup) mieux mais c'est la seule commande qui marche...
En tout cas, merci beaucoup !
[ JEROMAX ]
Si si, les dernières versions de awk ont implémenté cette possibilité ;-))