Augeas
使用 Augeas,我如何使用目前值修改屬性的值?
假設我有一些通用 INI 類型的文件,由 Samba.lns 覆蓋得最好。我有一個類似的條目:
attribute = value
我想轉換
value
為Some-VALUE-x
. 舉一個更具體的例子:augtool> print /files/etc/yum.conf/main/cachedir /files/etc/yum.conf/main/cachedir = "/var/cache/yum/$basearch/$releasever"
我想將值更改為:
"/var/cache/yum/noarch/$releasever"
也就是說,我想替換
$basearch
並noarch
留下其餘部分。我的實際範例稍微複雜一些。我什至可以在 augeas 內做到這一點嗎?
您無法通過單個 Augeas API 呼叫來執行此操作,但使用 aug_get 和 aug_set 您可以在呼叫語言中執行此操作。例如使用 ruby-augeas:
aug.set("/files/etc/yum.conf/main/cachedir", aug.get("/files/etc/yum.conf/main/cachedir").sub("$basearch", "noarch"))
如果您在每個範例中使用 augtool,則在 shell 中您可以執行以下操作:
cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/') augtool set /files/etc/yum.conf/main/cachedir "$cachedir"
Shellvars_list
庫存鏡頭接近提供我需要的東西。給定一個文件,例如
GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vgroot/lvswap rd.lvm.lv=vgroot/lvroot" GRUB_DISABLE_RECOVERY="true"
我想以冪等的方式將任意值附加到
GRUB_CMDLINE_LINUX
. 這個鏡頭解析這個文件如下:augtool> print $v /files/home/c14027/default-grub-sample /files/home/c14027/default-grub-sample/GRUB_TIMEOUT /files/home/c14027/default-grub-sample/GRUB_TIMEOUT/quote = "" /files/home/c14027/default-grub-sample/GRUB_TIMEOUT/value = "5" /files/home/c14027/default-grub-sample/GRUB_DEFAULT /files/home/c14027/default-grub-sample/GRUB_DEFAULT/quote = "" /files/home/c14027/default-grub-sample/GRUB_DEFAULT/value = "saved" /files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU /files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/quote = "" /files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/value = "true" /files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT /files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/quote = "\"" /files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/value = "console" /files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX /files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/quote = "\"" /files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[1] = "crashkernel=auto" /files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[2] = "rd.lvm.lv=vgroot/lvsap" /files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[3] = "rd.lvm.lv=vgroot/lvroot" /files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY /files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/quote = "\"" /files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/value = "true"
我們將做一個
defvar
in augtool 以便$v
代表我們的前綴。
CMDLINE
向此參數添加一個新值:set $v/GRUB_CMDLINE_LINUX/value[last()+1] test=142
刪除現有的:
rm $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")]
替換密鑰為 的密鑰對
test=
:set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234