Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: via sed aanpassen van variable in /etc configuratie file.  (gelezen 4247 keer)

Offline bart85

  • Lid
via sed aanpassen van variable in /etc configuratie file.
« Gepost op: 2023/08/22, 17:26:50 »
Onderstaande code geschreven:
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
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.
« Laatst bewerkt op: 2023/08/23, 08:18:21 door bart85 »
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline bart85

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #1 Gepost op: 2023/08/23, 09:29:21 »
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.

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

*Ik natuurlijk grep hierin toepassen, maar mij lijkt dat overbodig rekenkracht.
if grep $regex $file; then
    sudo sed -i -E "s/$regex/$sub/g" $file
else
    sudo bash -c "echo $sub >> $file"
fi
« Laatst bewerkt op: 2023/08/23, 10:38:31 door bart85 »
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline vanadium

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #2 Gepost op: 2023/08/23, 13:34:15 »
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.

Offline bart85

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #3 Gepost op: 2023/08/23, 15:16:49 »
Exit code zit in variabele $?

Het geeft geen resultaat.
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline vanadium

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #4 Gepost op: 2023/08/25, 08:39:13 »
Probeer het eens als volgt om beter te zien hoe het werkt:
$ ls
.....
$ echo $?
0
$ ls dfdaf
ls: cannot access 'dfdaf': No such file or directory
$ echo $?
2
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.

Offline bart85

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #5 Gepost op: 2023/08/25, 10:15:57 »
Exit code is meer dan 0 in het geval het programma verkeerd wordt gebruikt. Bijv. syntax fout, maar dat is er niet.
Linux kent file descriptors. 0 is stdin, 1 stdout, 2 stderr
Waarom is er niet een nr 4 voor waarschuwingen. In het geval syntax ok is, maar het had geen functie uitgevoerd?
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline vanadium

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #6 Gepost op: 2023/08/25, 14:29:47 »
Inderdaad, de foutcode verandert blijkbaar inderdaad niet als de string niet gevonden wordt, enkel als er een fout is (gebruikersfout, schijfprobleem...). Hier wordt precies je vraag gesteld. Het gaat wel degelijk via de exit code, maar je moet zelf instellen dat er een error code moet gegeven worden als een vervanging niet lukt. 

Edit: ook hier en hier.
« Laatst bewerkt op: 2023/08/25, 14:39:08 door vanadium »

Offline bart85

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #7 Gepost op: 2023/08/25, 15:27:58 »
Inderdaad, de foutcode verandert blijkbaar inderdaad niet als de string niet gevonden wordt, enkel als er een fout is (gebruikersfout, schijfprobleem...). Hier wordt precies je vraag gesteld. Het gaat wel degelijk via de exit code, maar je moet zelf instellen dat er een error code moet gegeven worden als een vervanging niet lukt. 

Edit: ook hier en hier.

Gelezen, maar vind het erg moeilijk. Ga er binnenkort mee aan de slag.
Dankjewel
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline bart85

  • Lid
Re: via sed aanpassen van variable in /etc configuratie file.
« Reactie #8 Gepost op: 2023/08/27, 14:54:21 »
Gelukt. Onderstaande is nu de juiste code:
sudo sed -i "/$regex/!{q100}; {s/$regex/$sub/}" $file || sudo bash -c "echo $sub >> $file"
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.