私はsedを使用するのは初めてですが、自動化における一般的な柔軟性のためにsedを愛することをすぐに学びました。新しいシステムを展開するたびに、さまざまなセキュリティ制御を備えたスクリプトを実行しようとしています。その一部では、GRUBをロックダウンする必要があります。 GRUBメニューから一般的なUbuntuオプションのロックを解除して、その後は誰でもパスワードなしで使用できるようにし、他のすべてのオプションはパスワードで保護したままにします。
そうは言っても、私は/boot/grub/grub.cfgファイルで特定の行を検索し、そのオプションに–unrestrictedを追加しようとしています。 (16.04.03のみを使用しているため、インストール時にすべてのシステムが理論的に同じファイルを持つことになります)
ファイルの行は次のとおりです。
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
そして、私はそれを次のように見せたいです:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
sed -iはインプレース編集用であり、s/は検索する必要があることを私は知っています。しかし、それを超えて、実際に必要なことを実行させるための構文に迷いました。私の知る限り、このような長い検索をしなくても簡単だと思うので、無制限のポジショニングが必要ですが、やはり私はsedに慣れておらず、確信が持てません。誰かがこのsedの挿入を手伝ってくれませんか?できれば、異なる構文がどこに行くのかを説明してください。そうすれば、将来に備えてわかります。
承認された回答:
これがコマンドです。
sed -i "s/--class os/--class os --unrestricted/" filename
これにより、-iオプションにより、一時ファイルを必要とせずにファイル内の行が置き換えられます。
「–unrestricted go」の行のどこに問題がない場合は、これが簡単かもしれません。
sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename