我有一个内容类似于
的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"
如何解决这个问题?请帮忙。
答案 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