【发布时间】:2016-05-16 17:19:14
【问题描述】:
我正在尝试使用以下命令从 yml 文件中删除一个块,
awk '$1 == "tool:"{t=1}
t==1 && $1 == "ports:"{t++; next}
t==2 && /:[[:blank:]]*$/{t=0}
t != 2' file.yml
对于下面的yml,
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
目标是从tool 主块中删除ports 子块。
来自https://stackoverflow.com/a/37256824/698072 的这个答案在尝试here 时似乎完全有效。但它正在从端口中删除所有内容,直到我的 Ubuntu 14.04 中的 yml 文件结束(在 14.04 的多个系统中的 sh 和 zsh 中都尝试过)。
预期:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
输出:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
对这个特殊案例的任何帮助都会非常棒。
【问题讨论】:
-
请不要包含控制台会话的图像。将文本复制并粘贴到您的问题中。
-
您使用的是什么版本的 awk?并非所有都支持字符类 (
[[:blank:]]),因此请尝试使用[ \t]。