使用 augtool 从 /etc/hosts 中删除多行

remove multiple line from /etc/hosts using augtool

我的 /etc/hosts 看起来像这样:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.13.11   idm.myhost.com
192.168.13.10   dnsf.myhost.com
192.168.13.11   idm.myhost.com
192.168.13.10   dnsf.myhost.com
192.168.13.11   idm.myhost.com
192.168.13.10   dnsf.myhost.com
192.168.13.10   temp1.myhost.com

我可以通过下面的查询来查询重复的行:

 print /files/etc/hosts/*/canonical["idm.myhost.com"]

或者使用正则表达式

defvar mypath /files/etc/hosts
print $mypath/*/*[.=~ regexp("dnsf.myhost.com")]

但是我不能用简单的 rm

删除这些匹配的行
rm /files/etc/hosts/*/canonical["idm.myhost.com"]

问题是,augtool 只是从节点中删除了规范叶,而 ipaddr 仍然存在。它导致保存功能 returns 错误。 我不想使用 bash 脚本,我尝试用 augeas 本身解决问题。 请帮忙...

P.S。我找不到这个有用工具的完整教程或文档。如果有人可以提出一份好的文件,我将不胜感激。我搜索了所有网络,只找到了几个简单的例子。

您的表达式选择规范节点而不是主机节点。如果要删除宿主节点,需要使用:

rm /files/etc/hosts/*[canonical="idm.myhost.com"]

这将选择 /files/etc/hosts 下的任何条目,其 canonical 子节点具有值 idm.myhost.com.

至于文档,有教程on the Augeas website, as well as some more docs on the Augeas wiki

还有一个介绍 Augeas 的视频 on Youtube

我开始了 writing a book some 7 years ago, which can still be found online,但从来没有花时间完成它。