2017-08-08 84 views
0

模式的我有一个字符串替代与SED

ATOM 2448 N LEU 301  -6.821 36.580 65.884 1.00 19.70   O 

在这里,我需要替换在第三列的任何条款(总是等于树大写字母)与NHE。

我尝试使用

sed-e 's/[[:upper:]][[:upper:]][[:upper:]]/NHE/g' 

,但它在第一列替代世界也

NHEM 2448 N NHE 301  -6.821 36.580 65.884 1.00 19.70   O 

怎么问SED替代仅仅由3个任意字母的单词(不超过3)?

谢谢!

+1

'awk'{$ 4 =“NHE”;打印}'文件'? – Cyrus

+0

@Cyrus,这是一个很好的答案。它会破坏输入的格式。 OP可以决定这是否有问题。 –

+1

[11](https://stackoverflow.com/users/4007276/james-starlight?tab=questions)问题和 [0](https://stackoverflow.com/users/4007276/james-starlight?tab=活动&排序=接受)接受。请看看:[我应该怎么做当有人回答我的问题?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

0

这可能会为你工作(GNU SED):

sed 's/\S\+/NHE/4' file 

NHE

更换第4个非空列的替代:

sed 's/\S\S*/NHE/4' file 
0
sed -r 's/(([^[:blank:]]+[[:blank:]]+){3})\<[[:upper:]]{3}\>/\1NHE/' file 
ATOM 2448 N NHE 301  -6.821 36.580 65.884 1.00 19.70   O 

某些系统需要-E,而不是-r

随着GNU sed的,你可以指定哪些比赛被替换。在这里,您要替换第四个空格分隔的字:

sed -r 's/[^[:blank:]]+/NHE/4' file