我有一个文件 ($pdbin),其中的行遵循特定格式。我正在尝试使用 sed 将字符 57-60 替换为字符串变量 $o,仅在匹配两个特定模式(包含 HETATM 和 NO)的行上。
这是我要修改的示例行,其中突出显示了我要更改的字符:
HETATM 1111 N NO A 204 4.938 19.295 -6.772 1.00 37.21 N
^^^^
这是我的 sed 命令,它替换了正确的字符(并保存到新文件 $xyzin
),但通过搜索 1.00
,而不是使用位置上线:
sed "/HETATM/{/NO/{s/1.00/$o/g}}" $pdbin > $xyzin
我想要替换的变量$o
是0.12
。
如何修改此命令以在位置 57-60
上进行操作,以便在我要替换的字符串与 1.00
不匹配时它可以工作?
最佳答案
您可以捕获捕获组中的前 56 个字符,并使用反向引用将其放回替换位置:
sed -E "/HETATM/{/NO/{s/(^.{56}).{4}/\1$o/;};}" "$pdbin" > "$xyzin"
cat "$xyzin"
HETATM 1111 N NO A 204 4.938 19.295 -6.772 0.12 37.21 N
关于bash - 如何用字符串替换一行中特定范围的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76433132/