notepad++中用列编辑删每行前两字符最稳,按alt+鼠标拖选第1-2列后delete即可,不受中文、emoji、制表符影响;正则^.{2}易因编码、换行符等出错。

直接用列编辑删前两个字符最稳
Notepad++ 里批量改每行前两个字符,本质是「物理位置删除」,不是语义替换。列编辑比正则更可靠,尤其当文件含中文、emoji、制表符或空行时。Alt + 鼠标拖选是唯一原生、零配置、所见即所得的方式。
- 必须先关闭「自动换行」(
View → Word wrap不勾选),否则纵向拖选会错位 - 把光标移到第一行第一个字符前(按
Home键确保到位),按住Alt不放,鼠标从第 1 列向下拖到最后一行的第 2 列,松手后形成竖直选区 - 直接按
Delete或Backspace—— 所有被框住的前两列都会被清空,不足两字符的行删到行尾为止,不报错也不跳过 - 松开
Alt再按Delete,选区就消失了;中间点其他地方或切换标签页也会中断选区
想替换成新字符?列编辑输入比正则更直观
如果目标不是删除而是替换(比如把每行前两个字母统一改成 XX),列编辑同样适用:拖选完前两列后,直接输入 XX,所有行对应位置同步更新。这比写正则更少出错,也不用担心 . 匹配宽度、\t 算几个字符、UTF-8 截断等问题。
- 输入内容长度不限,但会覆盖原有字符;若输
X(1 字符),只覆盖第一列,第二列保留原值 - 空行也会被选中,对应位置填入
XX,变成XX开头的空行;如需跳过空行,得提前用Ctrl+H删除空行或手动避开 - 混合了空格和
\t的缩进行,列编辑按屏幕像素对齐,\t显示宽度可能为 4 或 8,拖选时以实际显示为准
为什么别用 ^.{2} 正则替换
看似简洁的正则 ^.{2} 替换为空,在真实文本里极易翻车。它依赖字符计数,而 Notepad++ 的 . 在含多字节字符时行为不可控,且对边界情况无容错。
- 一行只有 1 个汉字(UTF-8 占 3 字节),
^.{2}可能只删掉前 2 字节,留下乱码 - 某行开头是
\t+a,\t被.当作 1 个字符,但显示宽度是 4,删完视觉上缩进崩坏 - 空行完全不匹配
^.{2},不会被处理;要补^.{1}$和^$,逻辑立刻膨胀 -
^.{2}在 Windows 换行符(\r\n)下可能跨行匹配,尤其文档混用\n和\r\n时
真要脚本化处理?导出用命令行更准
如果操作要重复几十次、跑在 CI 流程里,或者文件超大(>100MB),GUI 列编辑会卡顿,这时该切到命令行。它按字节/Unicode 码点计数,不依赖渲染,结果确定。
- Linux/macOS:
cut -c3- input.txt > output.txt(删前 2 字符,保留第 3 个起) - PowerShell:
Get-Content input.txt | ForEach-Object { $_.Substring(2) } > output.txt(Substring(2)从索引 2 开始,即跳过前两个字符) - Python 一行流:
python -c "open('out.txt','w').write(''.join(l[2:] for l in open('in.txt')))" - 注意:
cut按字节,Substring和 Python 按 Unicode 字符,处理 emoji 或中文时后者更合理
列编辑的「稳」来自它的物理性——它不管你是 ASCII 还是 UTF-8,不管缩进用空格还是 Tab,只要眼睛看到那两列,就能精准操作。但这也意味着你得自己数清楚哪两列,而不是靠语义判断。











