logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 25-01-2021 22:36:00

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Inserer du texte / regex sur plusieurs lignes

Bonsoir! Petit défi regex!

J'ai un fichier de configuration dans lequel je souhaite ajouter une variable VAR_3 dans la section [Section_B] :

[Section_A]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_B]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_C]
...
 


Evidemment, ça, ça fonctionne

sed -r '/\[Section_B\]/a VAR_3 = 10 ' test.txt


[Section_A]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_B]
VAR_3 = 10
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_C]
...
 
 


Mais si je parvenais à placer le texte en dessous de la partie commentaire, ça serait parfait big_smile (voir à la suite de la dernière variable)

[Section_B]

# du blabla
# du blabla
# du blabla
# du blabla
VAR_3 = 10

VAR_1 = 1
VAR_2 = 2

[Section_C]
...
 


Ou mieux

[Section_B]

# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2
VAR_3 = 10

[Section_C]
...
 



Contraintes :
  - seul le nom de la section est fixe,
  - Il y a toujours au moins une variable déjà définie dans la Section_B, son nom n'est pas fixe

Des idées? (sed,awk peu importe ça me va)

Dernière modification par David5647 (25-01-2021 22:38:53)

Hors ligne

#2 26-01-2021 09:55:13

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Inserer du texte / regex sur plusieurs lignes

Salut
Une idée, d'un débutant qui débute big_smile
si tu t'appuies sur la section C et que tu met la ligne avant avec un saut de ligne genre

sed -r '/\[Section_C\]/i VAR_3 = 10\n ' test.txt


[Section_A]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_B]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

VAR_3 = 10
 
[Section_C]

Dernière modification par Croutons (26-01-2021 10:05:58)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#3 26-01-2021 18:27:07

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : Inserer du texte / regex sur plusieurs lignes

Oui, ça fonctionne pas mal, il y a peu de chances que l’utilisateur change l'ordre des sections...

J'ai trouvé ça avec awk
On remplace identification  d'une fin de ligne  par "\n\n"  en place du '\n' habituel.
awk interprète alors un paragraphe comme une seule ligne (en gros)

awk '/^\[Section_B\]/{print;print "VAR_3 = 10";next}1' RS="\n\n" ORS="\n\n" test.txt


[Section_A]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_1 = 1
VAR_2 = 2

[Section_B]
# du blabla
# du blabla
# du blabla
# du blabla

VAR_3 = 10

VAR_1 = 1
VAR_2 = 2

[Section_C]
...
 
 



La encore, si l'utilisateur supprime tout les espaces, j'écris dans la section du dessous... J'imagine que c'est là un peu plus probable, quoique... tongue
Bon...

Résultat:
esthétisme :
#2 > #3 > #1
robustesse:
#1 > #2 > #3

Pas tout à fait décidé... =P

Dernière modification par David5647 (26-01-2021 18:31:42)

Hors ligne

Pied de page des forums