![替换指定行号和列中的字符串](https://linux22.com/image/143356/%E6%9B%BF%E6%8D%A2%E6%8C%87%E5%AE%9A%E8%A1%8C%E5%8F%B7%E5%92%8C%E5%88%97%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我想从第 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 行中第一次出现的K
。exc
答案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
。