[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