Ondersteuning > Programmeren

via sed aanpassen van variable in /etc configuratie file.

(1/2) > >>

bart85:
Onderstaande code geschreven:

--- Code: ---while read -r file var value rest;do
regex="^[ \t]*#?[ \t]*$var=.*$"
echo regex=$regex
sub=$var=$value
sed -i -E "s+$regex+$sub+g" $file
done < sedlist
--- Einde van code ---
De bedoeling is dat de gevonden regex in zijn geheel word vervangen door de variabele met naam en waarde. Ongeacht commented (met een #) en ongeacht er in de regels spaties en/of tabs zijn ingevoegd.
In gebruik voor installatie script. waarbijj optie -i aan sed nog moet worden toegevoegd om wijzigingen naar $file toe te schrijven.
Dit werkt dus niet. Getest op ubuntu 22.04

*Aan sed optie -E toegevoegd. Maar nog steeds niet geheel functioneel.
* ook voor testen was -i optie nodig. Denk dat ik er ben.

bart85:
Ook nog een vraag over sed. Kan het een melding weergeven wanneer er geen regex pattern heeft kunnen vervangen met mijn variabele. Om in dat geval een regel aan mijn configuratie bestand toe te voegen.


--- Code: ---if ! sed -i -E "s/$regex/$sub/g" $file; then
    # geen replace uitgevoerd
    sudo bash -c "echo $sub >> $file"
fi
--- Einde van code ---

*Ik natuurlijk grep hierin toepassen, maar mij lijkt dat overbodig rekenkracht.

--- Code: ---if grep $regex $file; then
    sudo sed -i -E "s/$regex/$sub/g" $file
else
    sudo bash -c "echo $sub >> $file"
fi

--- Einde van code ---

vanadium:
Dat kan je mogelijk toetsen aan de exit code van sed (zal je moeten testen). Een programma dat succesvol loopt, geeft een exit code 0. In geval van fout wordt er een andere exit code gezet. De exit code wordt gezet in de variabele $! wanneer het programma afgelopen is.

bart85:
Exit code zit in variabele $?

Het geeft geen resultaat.

vanadium:
Probeer het eens als volgt om beter te zien hoe het werkt:

--- Code: ---$ ls
.....
$ echo $?
0
$ ls dfdaf
ls: cannot access 'dfdaf': No such file or directory
$ echo $?
2

--- Einde van code ---
Wanneer het commando "ls" correct verloopt, geeft het een code 0 terug.  Als een directory niet gevonden is, wordt de errorcode hier op 2 gezet. Dus in je script "sed" uitvoeren, daarna met een if checken of $? al dan niet 0 is.

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie