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

如何替换文本特定字符并在其上方行首插入指定字符

问题描述

我有个文本文件,里面有不少内容相近的行,需要完成两个操作:

  1. 把所有带/的行里的/替换成-
  2. 在做了替换的那一行的上一行开头加个-

我试过这么写命令,但没达到预期:

cat text | sed "/\//s/^/- /g;s/\/ /\n- /g"

输入文件内容

1
00:00:00,000 --> 00:00:00,000
You are older.

2
00:00:00,000 --> 00:00:00,000
By length of a sunset.
/ Is older.

3
00:00:00,000 --> 00:00:00,000
Soona.

4
00:00:00,000 --> 00:00:00,000
Noa!
/ Noa, wait!

期望输出

1
00:00:00,000 --> 00:00:00,000
You are older.

2
00:00:00,000 --> 00:00:00,000
- By length of a sunset.
- Is older.

3
00:00:00,000 --> 00:00:00,000
Soona.

4
00:00:00,000 --> 00:00:00,000
- Noa!
- Noa, wait!
解决方案

你之前的命令没法处理“给上一行加-”的需求,因为sed默认逐行处理,没法直接回溯修改上一行。可以用sed的保持空间来临时存上一行内容,实现跨行修改。

用下面的命令就能搞定:

sed '/^\/ /{x;s/^/- /;x;s/^\/ /- /}' text

命令拆解

  1. /^\/ /:精准匹配以/ 开头的目标行
  2. 第一个x:交换当前行(模式空间)和保持空间的内容——此时保持空间里存的是上一行,模式空间是当前的/ ...行
  3. s/^/- /:给保持空间里的上一行开头加-
  4. 第二个x:再次交换,把改好的上一行放回模式空间,当前行回到保持空间
  5. s/^\/ /- /:把当前行的/ 替换成-
  6. 最后sed会自动输出修改后的两行

要是想直接修改原文件,加个-i参数就行:

sed -i '/^\/ /{x;s/^/- /;x;s/^\/ /- /}' text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:35:02