我有一个 config.yaml 文件,其中包含以下我想使用 bash 脚本从配置中删除的 kafka 代理列表等值。
kafka.brokers:
- "node003"
- "node004"
我目前通过使用以下命令从脚本内部调用 vi 来执行此操作:
vi $CONF_BENCHMARK/config.yaml -c ":%s/kafka.brokers:\(\n\s*-\s".*"\)*/kafka.brokers:/g" -c ':wq!'
我知道 sed 是完成相同任务的更合适的工具,但是当我尝试将上述正则表达式转换为 sed 时,它不起作用。
sed -i -e "s/kafka.brokers:\(\n\s*-\s".*"\)*/kafka.brokers:/g" $CONF_BENCHMARK/config.yaml
我做错了什么?
最佳答案
awk
助您一臂之力!
sed
是基于行的,这应该可以...
$ awk 's{if(/\s*-\s*"[^"]*"/) next; else s=0} /kafka.brokers:/{s=1}1' file
解释
if(/\s*-\s*"[^"]*"/) next
if pattern matches skip to next line
s{if(/\s...
check pattern if only s is set
/kafka.brokers:/{s=1}
when header seen set s
1
shorthand for print lines (if not skipped)
s{... else s=0}
if s was set but pattern not found, reset s
关于bash - 编辑 yaml 文件的 sed 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214611/