Pages : 1
#1 Le 16/12/2022, à 06:33
- diesel
[RÉSOLU] Se passer de sed
Bonjour,
Dans un script, je veux ajouter une ligne "à peu près" à la fin d'un fichier.
Dans un premier temps, je me suis servi de sed mais je voudrais le faire sans (et sans awk aussi).
Le fichier (toto) ressemble à ça :
define NTP = {
2001:41d0:700:143f::/128,
2001:41d0:800:143f::/128
}
J'ai une variable "adresse" qui contient : "2001:41d0:900:143f::" et je veux obtenir ça :
define NTP = {
2001:41d0:700:143f::/128,
2001:41d0:800:143f::/128,
2001:41d0:900:143f::/128
}
Pour l'instant, j'ai écrit ça :
{ head -q -c -3 toto ; echo -e ",\n\t$adresse/128\n}" ;} >temp ; mv temp toto
Ça fonctionne, mais y a-t-il mieux ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 17/12/2022, à 13:03)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 16/12/2022, à 12:49
- diesel
Re : [RÉSOLU] Se passer de sed
Un "petite" amélioration qui permet de "nettoyer" le fichier (notamment d'éventuels retours chariot à la fin du fichier ou d'adresses qui auraient été entrées à la main sans le /128) :
{ grep -E 'define|\/128' toto | head -q -c -1 ; echo -e ",\n\t$adresse/128\n}" ;} >temp ; mv temp toto
De plus, je trouvais que le 'head -q -c -3' était un peu dangereux si le fichier ne se terminait pas comme attendu.
D'autres idées ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 16/12/2022, à 12:59)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Le 16/12/2022, à 13:18
- diesel
Re : [RÉSOLU] Se passer de sed
Je continue de chercher. Il n'y a pas d'ordre dans la liste des adresses (sauf la dernière qui n'a pas de virgule). On peut faire sans le 'head -q -c -1' :
{ grep '^define '.*' = {$' toto ; echo -e '\t'$adresse'/128,' ; grep '/128,$' toto ; grep '/128$' toto ; echo '}' ;} >temp ; mv temp toto
Là, je crois que je suis pas mal blindé.
Par exemple, j'ai essayé le fichier toto suivant :
define NTP = {
2001:41d0:700:143f::/128,
2001:41d0:800:143f::/128
gtfkhgv
2001:41d0:600:143f::/128,
}
,nfg
et j'arrive à :
jean-marie@jean-marie:~$ { grep '^define '.*' = {$' toto ; echo -e '\t'$adresse'/128,' ; grep '/128,$' toto ; grep '/128$' toto ; echo '}' ;}
define NTP = {
2001:41d0:900:143f::/128,
2001:41d0:700:143f::/128,
2001:41d0:600:143f::/128,
2001:41d0:800:143f::/128
}
jean-marie@jean-marie:~$
C'est mieux, non ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 16/12/2022, à 13:28)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne