如何使用sed替换文件中以ABC开头行的10-15位固定位置内容
sed命令修正方案
错误原因
- 行首ABC丢失:原正则将
ABC写在捕获分组外,替换时未引用该部分内容,导致直接被丢弃 - 插入而非替换:原正则仅匹配到第12位(3位
ABC+后续9位字符),未覆盖需要替换的第10-15位内容,原有对应位置的字符没有被匹配删除,最终表现为插入新字符而非替换
正确命令
仅将结果输出到终端:
sed -r '/^ABC/s/^(.{9}).{6}/\177777/' sample.out
需要直接修改原文件(Linux等GNU sed环境):
sed -ri '/^ABC/s/^(.{9}).{6}/\177777/' sample.out
macOS环境使用:
sed -i '' -r '/^ABC/s/^(.{9}).{6}/\177777/' sample.out
命令说明
- 开头的
/^ABC/是地址限定规则,仅对以ABC开头的行执行后续替换操作,其余行直接原样输出 ^(.{9})匹配行的前9位字符(包含开头的ABC),存入第一个捕获分组.{6}匹配第10到15位共6个字符,替换时这部分内容会被直接丢弃- 替换内容
\177777中,\1指代第一个捕获分组的前9位内容,后续拼接需要替换的77777
注意:第10到15位共6个字符位,如果你需要严格占满6个字符位,将替换字符串改为
777777即可
内容的提问来源于stack exchange,提问作者user1210218
相关产品推荐
相关产品推荐

