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

如何通过正则表达式仅在指定行号替换目标单词

大文件指定行定点替换自动化方案

替换值可提前确定的批量场景

直接用sed命令一次性跑完所有替换,2000处修改几秒就能完成,不会有手动定位跳错行的问题。

  • 命令自带备份参数,执行后会自动生成.bak后缀的原文件备份,不用担心改坏文件:
sed -i.bak '
25s/要替换的原词/25行对应的新值/;
55s/要替换的原词/55行对应的新值/;
181s/要替换的原词/181行对应的新值/;
1448s/要替换的原词/1448行对应的新值/;
# 剩余规则按相同格式追加即可
' 目标文件的本地路径
  • 2000条规则不用手敲,提前把行号和对应替换值整理成两列的表格,用Excel或者几行简单脚本就能批量转成上面的规则格式,直接拼进命令就行。
  • 补充说明:sed匹配行号时用的是文件原始行号,哪怕前面的行改了内容、变了长度,后面的行匹配也不会错位;如果某一行里原词出现多次,单条规则末尾加g(比如25s/old/new/g)就能替换该行所有匹配的原词。

替换值需要逐处手动调整的场景

这种情况核心是省掉手动输行号跳转的步骤,实现一键顺次跳到待改位置,改完直接跳下一个,比手动用「转到行」功能快至少两倍:

  • 用Vim/Neovim的话操作最方便:
    1. 先把所有待改的行号从小到大排序,每行一个存成纯文本文件lines.txt
    2. 打开要改的目标文件,在命令模式下粘贴执行下面的配置:
    let g:todo_lines = readfile('lines.txt')
    let g:current_idx = 0
    function! JumpNextTodo()
        if g:current_idx >= len(g:todo_lines)
            echo "所有待改位置已处理完"
            return
        endif
        exec 'normal! ' . g:todo_lines[g:current_idx] . 'G'
        let g:current_idx += 1
    endfunction
    nnoremap <F2> :call JumpNextTodo()<CR>
    
    1. 改的时候按F2就自动跳到第一个待改行,改完再按F2直接跳下一个,手不用离开键盘,也不会跳错行。
  • 用VS Code这类图形编辑器的话,可以把所有待改行号批量转成文件名:行号的格式粘到内置终端,按住Ctrl点对应条目就能直接跳转;也可以装个书签扩展,把所有待改行批量加书签,用快捷键顺次跳书签就行。

注意事项

  • 不管用哪种方法,改之前一定要留原文件备份,大文件改崩了恢复很麻烦。
  • 如果手动逐行改的时候需要增删行内容,就从行号最大的位置往最小的位置改,避免前面增删行导致后面的行号对不上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:15:49