【发布时间】:2020-12-25 08:13:38
【问题描述】:
我有几千个具有相同行格式的文件。我试图替换以字符串(单词“ATOM”)开头的每一行中的第 17 个字符(一个字母),而不更改文件中的任何其他内容。例如,我想将 ATOM 后面的第 17 个字符从“D”替换为“A”:
输入
原子 14632 2HG2 VAL D 923 56.949 47.137 72.598 1.00 0.00 H
输出
原子 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 上。
【问题讨论】:
-
使用
awk。就像字面上的awk '$1 == "ATOM" && $5 == "D" { $5 = "A" }是否必须是“第17 个字符”并且可能是“第5 个字段”?文件中的字段不是用空格分隔的吗? -
嗯,很有趣。在这种类型的文件中,每个字符都是它自己的列,因此该字母将属于第 22 列。不幸的是,在此列中有更多不需要替换的字母的行,因此需要仅识别带有 ATOM 的行他们。
标签: sed regexp-replace