如何解决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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。