You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改进Sed命令,支持文件无对应键时自动添加键值对?

改进Sed命令实现键值对替换与缺失时的自动添加

原有Sed命令:

sed -i "/num.replica.fetchers/s/=.*$/=$num_cpu/" kafka.configuration

仅能在文件中存在num.replica.fetchers = XX时替换等号后的数值,若该键值对不存在则无任何操作。以下是两种改进方案,满足存在则替换,不存在则在#section A行后添加的需求:

方案一:单Sed命令完成

sed -i -e "/num.replica.fetchers/s/=.*$/=$num_cpu/" -e "/#section A/{n;/num.replica.fetchers/!i num.replica.fetchers = $num_cpu}" kafka.configuration

命令拆解:

  • -e "/num.replica.fetchers/s/=.*$/=$num_cpu/":保留原有替换逻辑,匹配到目标键值对时,将等号后的内容替换为$num_cpu。
  • -e "/#section A/{n;/num.replica.fetchers/!i num.replica.fetchers = $num_cpu}":
    1. 匹配到#section A行后,执行n命令跳转到下一行;
    2. 检查下一行是否包含num.replica.fetchers,如果不包含,就用i命令在#section A的下一行插入指定键值对。

方案二:Grep+Sed组合(更稳妥,避免重复添加)

如果担心多次执行命令导致重复插入键值对,可先用Grep检查文件中是否存在目标键,再决定是否添加:

# 检查目标键是否存在,不存在则在#section A后追加
grep -q "num.replica.fetchers" kafka.configuration || sed -i "/#section A/a num.replica.fetchers = $num_cpu" kafka.configuration
# 统一替换目标键的数值
sed -i "/num.replica.fetchers/s/=.*$/=$num_cpu/" kafka.configuration

命令拆解:

  • grep -q "num.replica.fetchers" kafka.configuration:静默模式检查文件,存在目标键返回0,不存在返回非0;
  • || sed -i "/#section A/a ...":仅当Grep检测到目标键不存在时,执行Sed在#section A行后追加键值对;
  • 最后执行替换命令,确保无论键是原有还是刚添加的,数值都被设置为$num_cpu。

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:22:43