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

如何使用sed替换每行中的多个指定位置字符?

解决sed替换多行指定位置字符的问题

你之前的命令报错是因为sed正则中\{5,10,23\}的写法不符合语法——\{n,m\}是用来限定前序表达式重复n到m次的语法,不能用来罗列多个独立的目标位置。

要替换每行第5、10、23位的字符为分号,由于每次替换都是将单个字符替换为等长度的分号(字符串总长度不变),可以通过多次执行单个位置替换命令来实现:

直接在命令行执行

sed 's/^\(.\{4\}\)./\1;/; s/^\(.\{9\}\)./\1;/; s/^\(.\{22\}\)./\1;/' text.txt > textm.txt
  • 每个s命令对应一个目标位置:
    • 替换第5位:匹配行首前4个字符(.\{4\}),将第5个字符替换为分号
    • 替换第10位:匹配行首前9个字符(.\{9\}),将第10个字符替换为分号
    • 替换第23位:匹配行首前22个字符(.\{22\}),将第23个字符替换为分号
  • 多个命令用分号;分隔,sed会按顺序依次执行

用sed脚本批量处理(适合位置较多的情况)

如果需要替换的位置很多,可以创建一个sed脚本文件(比如replace_pos.sed),内容如下:

s/^\(.\{4\}\)./\1;/
s/^\(.\{9\}\)./\1;/
s/^\(.\{22\}\)./\1;/

然后执行脚本:

sed -f replace_pos.sed text.txt > textm.txt

注意事项

  • 如果某行长度小于目标位置(比如不足23个字符),对应的替换命令不会对该行生效,也不会抛出错误
  • 确保使用的是GNU sed或兼容的版本,语法在主流sed实现中都通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:06:04