假设我有一些通用的 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
并保留其余部分。我的实际例子有点复杂。我什至可以在奥古斯内做到这一点吗?
答案1
您无法通过单个 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"
答案2
库存镜头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
在 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