Remplacer variable dans un fichier
Fermé
JEROMAX
Messages postés
274
Date d'inscription
jeudi 22 février 2001
Statut
Membre
Dernière intervention
7 octobre 2013
-
4 oct. 2013 à 13:27
Utilisateur anonyme - 7 oct. 2013 à 20:27
Utilisateur anonyme - 7 oct. 2013 à 20:27
A voir également:
- Remplacer variable dans un fichier
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
3 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
4 oct. 2013 à 15:40
4 oct. 2013 à 15:40
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}
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
4 oct. 2013 à 15:52
4 oct. 2013 à 15:52
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
$
;-))
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
4 oct. 2013 à 16:12
4 oct. 2013 à 16:12
les retours à la ligne mettent le bronx ;
ou Marseille ...
pourquoi ça, ça passe pas ?
ou Marseille ...
pourquoi ça, ça passe pas ?
sed -i 's|##ROUTE##|echo '"${ROUTE}"'|e' brol
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
4 oct. 2013 à 16:31
4 oct. 2013 à 16:31
ou Marseille ..;-)) C'est clair que c'est plus d'actualité...
pourquoi ça, ça passe pas ?Non ;-((
$ sed 's|##ROUTE##|echo '"${var}"'|e' brol
sed: -e expression n°1, caractère 45: commande 's' inachevée
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
4 oct. 2013 à 16:36
4 oct. 2013 à 16:36
J'ai mal exprimé
pourquoi est ce qu'avec echo ça ne passe pas alors qu'avec netstat, oui
pourquoi est ce qu'avec echo ça ne passe pas alors qu'avec netstat, oui
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
4 oct. 2013 à 16:41
4 oct. 2013 à 16:41
Je n'en ai pas la moindre idée ;-(
Je suppute une histoire d'interprétation des fins de lignes...
Je suppute une histoire d'interprétation des fins de lignes...
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
5 oct. 2013 à 08:50
5 oct. 2013 à 08:50
je dirais parce que $ROUTE est résoudu par le shell, donc les \n se trouvent sur la ligne de commande du sed. Ceci fonctionne, on récupère l'environement sans passer par le shell
sed -i "s|##ROUTE##|awk 'BEGIN {print ENVIRON[\"ROUTE\"]}'|e" brol
JEROMAX
Messages postés
274
Date d'inscription
jeudi 22 février 2001
Statut
Membre
Dernière intervention
7 octobre 2013
10
Modifié par JEROMAX le 7/10/2013 à 14:51
Modifié par JEROMAX le 7/10/2013 à 14:51
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 ]
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
7 oct. 2013 à 16:03
7 oct. 2013 à 16:03
il faut exporter ROUTE
export ROUTE=$(netstat ...)
$
$ X="hello"; awk 'BEGIN {print ENVIRON["X"]}'
$ export X="hello"; awk 'BEGIN {print ENVIRON["X"]}'
hello
$
4 oct. 2013 à 16:08
Si si, les dernières versions de awk ont implémenté cette possibilité ;-))