sed:查找并替换以特定字符串开头的行中的第 n 个字符

sed: find and replace nth character in a line that starts with a specific string

我有几千个行格式相同的文件。我试图替换以字符串(单词“ATOM”)开头的每一行中的第 17 个字符(一个字母),而不更改文件中的任何其他内容。因此,例如,我想将单词 ATOM 之后的第 17 个字符从“D”替换为“A”:

输入

ATOM 14632 2HG2 VAL D 923 56.949 47.137 72.598 1.00 0.00 H

输出

ATOM 14632 2HG2 VAL A 923 56.949 47.137 72.598 1.00 0.00 H

我正在使用以下代码,它更改了字母,但删除了该行中它之前的所有内容:

sed -i '.bak' 's/^\(ATOM.\{17\}\)D/\A/' input.file

输出

A 923 56.949 47.137 72.598 1.00 0.00 H

对于我在这里做错的任何帮助,将不胜感激。

'.bak' 在那里,因为我在 Mac。

是:

sed 's/^\(ATOM.\{16\}\)D/A/'
  • .\{16\} - 你说 I'd like to replace the 17th character after the word ATOM from "D" to "A"。所以你想匹配任何 16 个字符 然后匹配第 17 个字符 D.
  • </code> - 将第一个 <code>\(...\) 记住的内容放在那里。
  • A - 后跟 A.