[Linux] sed grep ou awk - remplace ment de chaine de caracteres
Marc Chantreux
mc@::1
Ven 18 Oct 19:40:52 CEST 2024
On Fri, Oct 18, 2024 at 06:52:30PM +0200, Daniel Huhardeaux wrote:
>
> Le 18/10/2024 à 18:42, Marc Chantreux a écrit :
> > je sais que certains ont des réticences avec awk mais la solution
> > awk est simple et moins fragile que celle de sed
> >
> > awk -F: '
> > $1 ~ / *Terek4 */ { search=1 }
> > search && $1 ~ / *enabled */ { $2 = "true" ; search=0 }
> > 1
> > ' <<%
> Je confirme, c'est également fonctionnel. Cependant pas encore tout compris
> ;)
-F: => les colonnes sont séparées par des ":"
donc colonne 1 contient la clef et colonne 2 contient la value seulement
si y'a pas de : dans celle-ci (sinon c'est le debut)
$n => la valeur de la colonne n (donc $1 == colonne 1)
un script awk est organisé sous la forme condition {action}
condition {action}
awk -F: '
# pour les lignes dont la colonne 1 matchent le motif
# (donc l clef est Terek4)
# je met la valeur search a 1
$1 ~ / *Terek4 */ { search=1 }
# quand search est à 1 et que la colonne 1 contient enabled
# * j'écris "true" dans la colonne 2
# je passse search à 0
search && $1 ~ / *enabled */ { $2 = "true" ; search=0 }
# quand y'a pas d'action, l'action par defaut est print
# 1 est une condition toujours vrai
# donc ce 1 veut dire: affiche toutes les lignes
1
'
--
Marc Chantreux
Pôle CESAR (Calcul et services avancés à la recherche)
Université de Strasbourg
14 rue René Descartes,
BP 80010, 67084 STRASBOURG CEDEX
03.68.85.60.79
Plus d'informations sur la liste de diffusion linux