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

如何使用sed命令:当第21位为R时替换第13-14位MP为GH?

用sed实现固定位置的条件替换

当然可以实现!针对这种固定长度记录的条件替换需求,sed完全能胜任,下面是具体的命令和详细解释:

核心命令

sed -E '/^.{20}R/ s/^(.{12})MP/\1GH/' input.txt

命令拆解

我们把这个命令分成两部分来看:

  1. 地址匹配(筛选目标行):/^.{20}R/

    • ^ 匹配行的开头
    • .{20} 匹配任意20个字符(对应记录的前20位)
    • 紧接着的R表示第21位字符必须是R,只有满足这个条件的行才会被后续的替换操作处理
  2. 替换操作:s/^(.{12})MP/\1GH/

    • ^(.{12}) 捕获记录的前12位字符,用\1在替换结果中引用这部分内容
    • MP 匹配第13-14位的目标子串
    • \1GH 将捕获的前12位保留,把MP替换成GH,后续的所有字符都会自动保留

效果示例

假设你的输入文件中有这样两行:

UNIT56712423MP000000R0990
UNIT56712423MP000000X0990

执行命令后,第一行(第21位是R)会被修改为:

UNIT56712423GH000000R0990

第二行(第21位不是R)则保持不变。

额外说明

  • 如果你的sed版本是GNU sed,也可以用-r代替-E,两者作用相同(启用扩展正则表达式,避免对括号和量词转义)
  • 如果需要直接修改原文件而不是输出到终端,GNU sed可以加-i选项,BSD sed(比如macOS上的)需要用-i '':
    # GNU sed
    sed -i -E '/^.{20}R/ s/^(.{12})MP/\1GH/' input.txt
    
    # BSD sed(macOS)
    sed -i '' -E '/^.{20}R/ s/^(.{12})MP/\1GH/' input.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:27:50