Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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