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

如何用sed按匹配顺序将::替换为<b>或</b>(支持段落末尾)

解决文本中替换::为<b>和</b>的问题

原命令的问题

你使用的sed命令s|::\(.*\)|\\&lt;b&gt;\1\\&lt;/b&gt;|g存在两个核心问题:

  1. 默认sed逐行处理,.*无法匹配换行符,导致跨行的内容无法被完整捕获;
  2. 全局替换标记g会把所有::都替换,不符合“第一个::换<b>、第二个::换</b>”的需求。

解决方案

方法1:使用sed处理跨行内容

通过将整个文件内容读入模式空间,实现跨行匹配并替换前两个:::

# 输出处理结果
sed -e '1h;1!H;$!d;g' -e 's/::/<b>/;s/::/<\/b>/' EntrenamientoProgresivoSamadhi

# 原地修改文件(直接覆盖原文件)
sed -i -e '1h;1!H;$!d;g' -e 's/::/<b>/;s/::/<\/b>/' EntrenamientoProgresivoSamadhi

命令解释:

  • 1h;1!H;$!d;g:将整个文件内容合并为一个整体读入模式空间,解决跨行匹配问题;
  • s/::/<b>/:替换第一个出现的::为<b>;
  • s/::/<\/b>/:替换接下来第一个出现的::为</b>。

方法2:使用Perl更简洁处理

Perl默认支持跨行匹配,语法更直观:

# 输出处理结果
perl -0777 -pe 's/::(.*?)::/<b>$1<\/b>/s' EntrenamientoProgresivoSamadhi

# 原地修改文件
perl -i -0777 -pe 's/::(.*?)::/<b>$1<\/b>/s' EntrenamientoProgresivoSamadhi

命令解释:

  • -0777:将整个文件作为单个字符串读取;
  • s/::(.*?)::/<b>$1<\/b>/s:非贪婪匹配一对::之间的内容(包含换行),替换为对应的<b>标签;s修饰符让.匹配换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:57