如何从 YAML 文件中删除顶级条目及其下面的所有节点?

如何从 YAML 文件中删除顶级条目及其下面的所有节点?

我的文件包含以下条目:

cat /tmp/test.yaml
---
10.8.8.26:
  /tmp/win5835113081224811756.jar:
    hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

  /tmp/win03745991442278706.jar:
    hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

10.9.9.26:
  /tmp/conf/extra/httpd-ssl.conf:
    hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2

  /tmp/conf/httpd.conf:
    hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2

等等...

我希望从 test.yaml 中删除特定 IP(例如 10.8.8.26)及其文件详细信息

下面的正则表达式有助于获取我希望从文件中删除的详细信息,因此我将其存储在名为 check 的变量中:

export check=`grep -Pzo '[^#](^10.8.8.26:)(.|\n)*^(?!( |\n))' /tmp/test.yaml`

echo $check
10.8.8.26: /tmp/win5835113081224811756.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb /tmp/win03745991442278706.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

然后我想使用变量检查来从文件中删除抓取的条目。

我尝试了以下命令,但它们没有帮助。

grep -v "$check" /tmp/test.yaml

sed "/${check}/d" /tmp/test.yaml sed: -e expression #1, char 1:
 unterminated address regex

您能建议我如何满足我的要求吗?

答案1

会走多远

awk -v"DEL=10.8.8.26" '/^[0-9]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file

我懂了?

尝试

awk -v"DEL=10.9.9.26" '/^[^ ]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file

“如果 IP 地址更改为主机名。” (来自你的评论)。将其包含在原来的问题中会有所帮助。

相关内容