[Linux] sed grep ou awk - remplace ment de chaine de caracteres

Marc Chantreux mc@::1
Sam 19 Oct 14:20:41 CEST 2024


> J'ai compris. Cependant je me suis rendu compte que le : de enabled
> disparait et que si je fais
> search && $1 ~ / *enabled/{ $2=": true" ; search=0 }
> le résultat devient enabled : true (espace entre enabled et le :) Je ne
> pense pas que yaml accepte cela.

indeed: ce dont on a besoin c'est

awk '
	BEGIN { # avant de lire quoi que ce soit
		# output field separator =
		# field separator = ":"
		OFS=FS=": "
	}
	$1 ~ / *Terek4$/  { search= 1 }
	search && $1 ~ / *enabled$/ { $2 = "true" ; search=0 }
	1
' config.yml

le begin peut disparaitre comme suit

awk -F': ' -vOFS=': ' '
	$1 ~ / *Terek4$/  { search= 1 }
	search && $1 ~ / *enabled$/ { $2 = "true" ; search=0 }
	1
' config.yml

tu peux aussi set key et value au passage

yamlawk() awk -F': ' -vOFS=': ' -vkey=1 -vvalue=2 "$@"

< config.yaml yamlawk '
	$key ~ / *Terek4$/  { search= 1 }
	search && $key ~ / *enabled$/ { $value = "true" ; search=0 }
	1
'

exercice: comment faire en sorte que le changement ne soit effectué
qu'une fois dans le cas de

Terek4:
	enabled: wow
Terek4:
	enabled: wow


a+
marc


Plus d'informations sur la liste de diffusion linux