[Linux] sed grep ou awk - remplace ment de chaine de caracteres
Daniel Huhardeaux
daniel.huhardeaux@::1
Dim 20 Oct 19:32:20 CEST 2024
Le 19/10/2024 à 14:20, Marc Chantreux a écrit :
>> 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 -F': ' -vOFS=': ' '
> $1 ~ / *Terek4$/ { search= 1 }
> search && $1 ~ / *enabled$/ { $2 = "true" ; search=0 }
> 1
> ' config.yml
Bon, ce qui fonctionne en en ligne de commande ne fonctionne pas dans un
script bash.
Le résultat final fonctionnel en script shell pour une recherche sur 3
clés (cameras,
Terek4, enabled) est
#!/bin/sh
#
mycam=Terek4
mystate=true #or false
conf_file="/home/tootai/config.yml"
cmd_awk='
$1 ~ / *cameras$/ { search=1 }
#
# NOTE: reverse order is VERY IMPORTANT for the search == value as we
want to modify the model AFTER the one we just tested
#
#{ if (search == 2 && $1 ~ / *enabled$/ { $2 = $mystate ; search=0 } } ;
ne fonctionne pas dans un script
#{ if (search == 1 && $1 ~ / *$mycam$/ { search=2 }
} ; ne fonctionne pas dans un script
#
{if (search == 2 && index($1, enabled) != 0) {$2=mystate; search=0}}
{if (search == 1 && index($1, mycam) != 0) {search=2}}
1'
new_conf_file=$(awk -F':' -vOFS=': ' -v mycam="$mycam" -v
mystate="$mystate" "$cmd_awk" $conf_file)
echo "$new_conf_file">$conf_file
À noter que dans la commande awk -F': ' l'espace a du être retiré afin
que cela soit fonctionnel.
Merci Marc pour ton eide et tes explications détaillées.
--
Daniel
Plus d'informations sur la liste de diffusion linux