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

如何用sed仅替换href属性双引号内的下划线为短横线?

解决sed仅替换href属性引号内下划线的问题

现有HTML内容如下:

需要仅将href属性双引号内的下划线(_)替换为短横线(-),但之前使用sed -e "/href/s/_/-/g" index.html会替换整行所有下划线(比如Parent_topic、Sample_html_page里的下划线也会被修改),正确的sed实现方法如下:

方法1:基础循环替换匹配

执行以下命令:

sed -e ':loop' -e 's/\(href="[^"]*\)_\([^"]*"\)/\1-\2/' -e 't loop' index.html

命令解释:

  • :loop:定义一个循环标签,用于重复执行替换操作
  • s/\(href="[^"]*\)_\([^"]*"\)/\1-\2/:
    • 通过括号捕获两个分组:第一个分组匹配href="到第一个_之前的所有内容,第二个分组匹配_之后到闭合双引号"的所有内容
    • 将匹配到的_替换为-,保留前后分组的内容不变
  • t loop:如果上一次替换操作成功执行,就跳转到loop标签继续循环,直到href引号内的所有_都被替换完成

方法2:扩展正则简化写法(GNU sed等支持)

如果你的sed支持扩展正则,可以用更简洁的命令:

sed -E -e ':loop' -e 's/(href="[^"]*)_([^"]*")/\1-\2/' -e 't loop' index.html

执行后,href="../some_text_here_a_b"会被修改为href="../some-text-here-a-b",而其他位置的下划线(如Parent_topic、Sample_html_page)会保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:30:25