Jsem nový v používání sed, ale rychle se učím ho milovat pro jeho obecnou flexibilitu v automatizaci. Chci spustit skript s různými bezpečnostními kontrolami pokaždé, když nasadím nový systém, a částečně to vyžaduje, abych uzamkl GRUB. Chci odemknout obecnou možnost Ubuntu z nabídky GRUB, aby ji poté mohl kdokoli používat bez hesla a zároveň zachovat vše ostatní chráněné heslem.
jak bylo řečeno, hledám v souboru /boot/grub/grub.cfg konkrétní řádek a do této možnosti přidám –unrestricted. (Používáme pouze 16.04.03, takže všechny systémy by teoreticky měly po instalaci stejný soubor)
Řádek v souboru je:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
A chci, aby to vypadalo takto:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
Vím, že sed -i je pro úpravy na místě a s/ by měl hledat. Ale kromě toho jsem ztracen v syntaxi, aby to skutečně dělalo to, co potřebujeme. Pokud mohu říci, že umístění –unrestricted je potřeba, protože věřím, že by bylo jednodušší, kdybychom nemuseli mít tak dlouhé hledání, ale opět jsem v sed a nejsem si jistý. Mohl by mi někdo pomoci s tímto vložením sed? Nejlépe mi také vysvětlete, proč je jiná syntaxe tam, kde je, abych to věděl do budoucna.
Přijatá odpověď:
Zde je příkaz.
sed -i "s/--class os/--class os --unrestricted/" filename
Toto nahradí řádek v souboru bez nutnosti dočasného souboru, kvůli volbě -i.
Pokud nezáleží na tom, kam v řádku jde „–neomezené“, může to být jednodušší.
sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename