如何从YML中删除主块

时间:2016-05-31 09:56:22

标签: bash shell awk

我有一个内容类似于

的YML文件
test:
  volumes:
    - /u01/test-service/conf:/root/config

testmanager:
  port:
    - "2222:80"

我想根据某些条件删除test或testmanager块。这是我找到的here

的awk表达式
awk '{sub(/\r$/, "")}
                     $1 == "test:"{t=1}
                     t==1 && $1 != "test:" {t++; next}
                     t==2 && /:\s*$/{t=0}
                     t != 2'

这将删除测试中的所有内容,但保留字符串“test:”。像这样的东西,

reportservice:
reportmanager:
  port:
    - "2222:80"

如何解决这个问题?请帮忙。

1 个答案:

答案 0 :(得分:1)

使用显示的输入,您可以将此awk命令与空RS

一起使用
awk -v RS= '!/^[[:blank:]]*test:/' file.yml

testmanager:
  port:
    - "2222:80"

这假设每个块之间有一个空行。如果这不起作用,您可以修改您可以执行的现有命令:

awk '{sub(/\r$/, "")}
     $1 == "test:"{t=1}
     t==1 && $1 != "test:" {t++; next}
     t==2 && /:\s*$/{t=0}
    !t' file.yml