用SED代替图案

时间:2017-08-08 14:22:24

标签: text 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个)的单词?

谢谢!

2 个答案:

答案 0 :(得分:0)

这可能适合你(GNU sed):

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

将第4个非空列替换为NHE

替代方案:

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

答案 1 :(得分: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,您可以指定替换哪个匹配。在这里,您想要替换第4个以空格分隔的单词:

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