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

如何用sed/awk匹配正则第二次出现并替换整行(不指定固定行号)

实现方案

需求说明

  • 不指定行号,匹配所有包含remote_addrs的行
  • 可控制替换指定次数的匹配行(示例中为替换第2次匹配的行,第1次匹配保留)
  • 替换整行内容为remote_addrs = 3.3.3.3

问题原因

你之前使用的sed命令将整个文件读为单个字符串处理,正则中的.*为贪婪匹配,会直接匹配到文件末尾而非当前行结尾,因此无法实现单一行替换。

sed 实现方案

替换第2次匹配到的remote_addrs行(符合你的示例需求)

# 仅输出修改后的内容,不修改原文件
sed '/remote_addrs/{x;s/^/x/;/^xx$/{x;s/.*/remote_addrs = 3.3.3.3/;x};x}' your_file

# GNU sed 直接修改原文件
sed -i '/remote_addrs/{x;s/^/x/;/^xx$/{x;s/.*/remote_addrs = 3.3.3.3/;x};x}' your_file

# MacOS 系统 sed 直接修改原文件
sed -i '' '/remote_addrs/{x;s/^/x/;/^xx$/{x;s/.*/remote_addrs = 3.3.3.3/;x};x}' your_file

替换所有匹配到的remote_addrs行

如果需要把所有包含remote_addrs的行全部替换,直接用以下命令即可:

sed 's/^remote_addrs.*/remote_addrs = 3.3.3.3/' your_file

awk 实现方案

替换第2次匹配到的remote_addrs行

# 仅输出修改后的内容
awk '/remote_addrs/{count++} count==2{$0="remote_addrs = 3.3.3.3"}1' your_file

# 直接修改原文件(GNU awk 4.1.0+版本支持)
gawk -i inplace '/remote_addrs/{count++} count==2{$0="remote_addrs = 3.3.3.3"}1' your_file

替换所有匹配到的remote_addrs行

awk '/remote_addrs/{$0="remote_addrs = 3.3.3.3"}1' your_file

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:07