替换指定行号和列中的字符串

替换指定行号和列中的字符串

我想从第 4 行替换 19823 之后的字符“K”,但不替换后面的“K”字符

19822SOL     OW60021   7.173   
19822SOL    HW160022   7.230   
19822SOL    HW260023   7.124   
19823K        K60024   8.427   

所以新文件应该看起来像

19822SOL     OW60021   7.173   
19822SOL    HW160022   7.230   
19822SOL    HW260023   7.124   
19823exc      K60024   8.427   

目前我确实知道如何使用 sed 命令将第 4 行中的 K 替换为 exc,例如

sed -i "4s/K/exc/g" <newfile> 

但我不知道如何指定选择哪一列

答案1

如果只是关于那个特定的K,那么去掉该g标志就可以了,因为sed只会替换K一次。因此:

sed -i "4s/K/exc/" <newfile> 

即,它替换了第 4 行中第一次出现的Kexc

答案2

如果你想要第一个K,只需去掉该g标志即可:

sed -i '4s/K/exc/' <newfile> 

如果要替换第二个、第三个等K,请使用2, 3,4代替g

sed -i '4s/K/exc/2' <newfile>
sed -i '4s/K/exc/3' <newfile>

如果你想替换K从第三个到最后的所有 s (仅受 GNU sed 支持):

echo 'KKKKKK' | sed s/K/E/3g
KKEEEE

顺便说一句,不要使用双引号 ( ") ,除非您确实想在传递给 的字符串中插入 shell 变量、命令扩展等sed

相关内容