如何使用sed替换行尾/并在该行及下一行行首添加-
处理行尾斜杠并添加行首标记的解决方案
需求回顾
要完成两个核心操作:
- 移除行尾的
/字符 - 在原行尾带
/的行,以及它的下一行的行首添加-
正确的Sed命令
直接执行这条命令就能实现预期效果:
sed -E 'N; s/(.*)\/\n(.*)/- \1\n- \2/; P; D' input
命令拆解说明
N:将下一行内容读入模式空间,把当前行和下一行合并成一个整体处理,方便成对修改s/(.*)\/\n(.*)/- \1\n- \2/:- 精准匹配「行内容+/+换行+下一行内容」的结构
- 捕获
/前面的所有内容(\1)和下一行的完整内容(\2) - 替换后自动移除原行的
/,同时给两行分别加上-前缀
P:打印模式空间里的第一行处理结果D:删除模式空间里的第一行,把剩余内容留到下一轮循环,保证后续行正常遍历处理
你之前尝试的问题分析
- 第一个命令:
sed -E 'N;s/^(- )?(.*\n)\//- \2-/;P;D'
替换逻辑错误,仅把下一行开头的/换成-,既没移除原行的/,也没给原行正确添加行首标记 - 第二个命令:
sed 'N; \#\n/# { s//\n-/; s/^/- / }; P;D'
未处理原行的/,只是替换了下一行的/,修改不完整 - 第三个命令:
sed -E 'N;s|([^\n]*\n)/|- \1-|;P;D'
保留了原行的/,且下一行仅把/换成-,没有添加完整的-前缀 - 第四个命令:
sed -Ez 's|([^\n]*\n)/|- \1-|g'-z会把整个文件当作单行处理,替换逻辑没覆盖原行的行首标记添加,还容易误处理其他场景
效果验证
用你的输入测试后,执行命令会得到完全符合预期的输出:
00:00:00,000 --> 00:00:00,000 <b><font color="#ffffff">Lorem Ipsum</font></b> 2 00:00:00,000 --> 00:00:00,000 - Lorem ipsum dolor sit - amet, consectetur adipiscing elit. 3 00:00:00,000 --> 00:00:00,000 Ut sed gravida nisi. 4 00:00:00,000 --> 00:00:00,000 - Nunc sit amet ultrices urna, - non efficitur neque. 5 00:00:00,000 --> 00:00:00,000 <b><font color="#ffffff">Cras aliquam tristique dui, viverra laoreet diam hendrerit ac.</font></b>
内容的提问来源于stack exchange,提问作者July Elizabeth
相关产品推荐
相关产品推荐

