我有一个 config.yaml 文件,其中包含以下我想使用 bash 脚本从配置中删除的 kafka 代理列表。
kafka.brokers:
- "node003"
- "node004"
Run Code Online (Sandbox Code Playgroud)
我目前通过使用以下命令从脚本内部调用vi来执行此操作:
vi $CONF_BENCHMARK/config.yaml -c ":%s/kafka.brokers:\(\n\s*-\s".*"\)*/kafka.brokers:/g" -c ':wq!'
Run Code Online (Sandbox Code Playgroud)
我知道sed是完成相同任务的更合适的工具,但是当我尝试将上述正则表达式转换为sed 时,它不起作用。
sed -i -e "s/kafka.brokers:\(\n\s*-\s".*"\)*/kafka.brokers:/g" $CONF_BENCHMARK/config.yaml
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
awk 来救援!
sed 是基于行的,这应该有效......
$ awk 's{if(/\s*-\s*"[^"]*"/) next; else s=0} /kafka.brokers:/{s=1}1' file
Run Code Online (Sandbox Code Playgroud)
解释
if(/\s*-\s*"[^"]*"/) next如果模式匹配,则跳到下一行
s{if(/\s...检查模式,如果仅设置了 s,则设置
/kafka.brokers:/{s=1}s
1打印行的简写(如果未跳过)
s{... else s=0}如果设置了 s 但未找到模式,则重置 s
| 归档时间: |
|
| 查看次数: |
11156 次 |
| 最近记录: |