linux 中实现将 每一行指定的最后一个出现的特定字符替换为指定字符

 

001、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt           ## 测试数据
a bc k bc
e bc bc bc
3 44 55 60
bc bc kk uu
[root@PC1 test]# rev a.txt | sed 's/cb/QQ/' | rev     ## 将每一行最后的bc替换为QQ
a bc k QQ
e bc bc QQ
3 44 55 60
bc QQ kk uu

 

 

 

002、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt
a bc k bc
e bc bc bc
3 44 55 60
bc bc kk uu
[root@PC1 test]# rev a.txt | sed "s/$(echo bc | rev)/QQ/" | rev     ## 将非一行中最后的bc替换为QQ
a bc k QQ
e bc bc QQ
3 44 55 60
bc QQ kk uu

 

 

003、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cp a.txt a.txt.bak
[root@PC1 test]# ls
a.txt  a.txt.bak
[root@PC1 test]# cat a.txt
a bc k bc
e bc bc bc
3 44 55 60
bc bc kk uu
[root@PC1 test]# awk -F "bc" '{print NF - 1}' a.txt | awk '{if($0 == 0) {$0 = $0 + 1}; print NR, $0}' | while read {i,j}; do sed "$i s/bc/QQ/$j" a.txt -i; done
[root@PC1 test]# cat a.txt
a bc k QQ
e bc bc QQ
3 44 55 60
bc QQ kk uu

 

posted @ 2022-12-08 20:28  小鲨鱼2018  阅读(340)  评论(0编辑  收藏  举报