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

问题描述

我有两千个具有相同行格式的文件。我正在尝试以字符串(单词“ 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...