Sed在每行的两个字符之间添加行

时间:2015-07-29 13:55:36

标签: regex macos sed

我有一个包含以下行的文件:

HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX O   ...
HETATM XXXX O   ...
HETATM XXXX O   ...

其中XXXX是一个1-5位的数字。 我想在最后三行中在XXXXO之间添加一个空格,以便它们匹配前三个。我可以使用HETATM *[0-9]* O选择相关部分。如何在[0-9]*Osed之间添加额外空格? (注意:我使用的是Mac OS X)

1 个答案:

答案 0 :(得分:2)

我会使用tac反向打印文件,然后awk在前三行的第二个字段后面加一个空格,然后将其反转:

tac file | awk 'NR<=3 {$2=$2" "}1' | tac

测试

$ cat a
HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX O   ...
HETATM XXXX O   ...
HETATM XXXX O   ...
$ tac a | awk 'NR<=3 {$2=$2" "}1' | tac
HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX  O   ...
HETATM XXXX  O ...
HETATM XXXX  O ...
HETATM XXXX  O ...