oc如何提取文件中的第n行第n个字符 比如: hello, boy, girl, i love
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oc如何提取文件中的第n行第n个字符 比如: hello, boy, girl, i love相关的知识,希望对你有一定的参考价值。
ou.
yesterday.
tonight.
crying.
想提取第三行的love
sed:查找并替换以特定字符串开头的行中的第 n 个字符
【中文标题】sed:查找并替换以特定字符串开头的行中的第 n 个字符【英文标题】:sed: find and replace nth character in a line that starts with a specific string 【发布时间】: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 的行他们。
【参考方案1】:
是:
sed 's/^\(ATOM.\16\\)D/\1A/'
.\16\
- 你说的是 I'd like to replace the 17th character after the word ATOM from "D" to "A"
。所以你想匹配任何 16 个字符,然后匹配第 17 个字符,即D
。
\1
- 将记忆中的第一个 \(...\)
放在那里。
A
- 后跟 A
。
【讨论】:
感谢KamilCuk,几乎成功了!除了我确实需要 17 ......它并没有与那里的 16 做出改变。然后我也使用了“。”而不是 17,只是将每个字母更改为“A”。以上是关于oc如何提取文件中的第n行第n个字符 比如: hello, boy, girl, i love的主要内容,如果未能解决你的问题,请参考以下文章