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

如何用Sed命令匹配含指定字符串的行并替换部分内容?

解决sed替换无匹配的问题

你的sed命令失效主要有三个原因:

  • 单引号嵌套错误:直接在单引号包裹的sed表达式里写单引号,shell会把它当成表达式的结束符,导致语法混乱
  • 正则语法不兼容:sed默认使用基础正则表达式,{40}需要转义成\{40\}才能表示重复40次,否则会被当成普通字符
  • 多余的连续单引号:你写的''([a-z0-9]{40})''是无效语法,正确的应该是匹配单引号内的哈希值

下面给你几个可用的正确命令:

方法1:用双引号包裹sed表达式(最直观)

sed -i "s/'new_revision':'[a-z0-9]\{40\}'/'new_revision':'000c0000b08b96c987482e08d28d84ea3d777eml'/" file

双引号内可以直接使用单引号,不需要转义,同时把{40}转义成\{40\}适配sed的基础正则。

方法2:用扩展正则(简化正则写法)

给sed加-r选项启用扩展正则,这样{40}不需要转义:

sed -i -r "s/'new_revision':'[a-z0-9]{40}'/'new_revision':'000c0000b08b96c987482e08d28d84ea3d777eml'/" file

方法3:不限制哈希长度(容错性更高)

如果不确定哈希的精确长度,或者只要替换所有new_revision字段的值,可以直接匹配单引号内的任意内容:

sed -i "s/\('new_revision':'[^']*\)/\1000c0000b08b96c987482e08d28d84ea3d777eml'/" file

这个命令会匹配'new_revision':'开头的部分,然后替换后面直到下一个单引号的所有内容为目标字符串,不管原哈希多长都能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:45:40