问题描述
我有两千个具有相同行格式的文件。我正在尝试以字符串(单词“ 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
对于我在这里做错的任何帮助,将不胜感激。
因为在Mac上,所以'.bak'就在那里了。
解决方法
它是:
sed 's/^\(ATOM.\{16\}\)D/\1A/'
-
.\{16\}
-您说过I'd like to replace the 17th character after the word ATOM from "D" to "A"
。因此,您要匹配任何 16个字符,然后匹配D
的第17个字符。 -
\1
-将第一个\(...\)
记住的内容放在这里。 -
A
-后跟A
。