Linux学习,使用sed命令对文件内的指定字符串进行替换
一、创建一个txt文件,用于做测试
vi huawei.txt
二、替换每行第一个huawei为apple,第三个“/”后,不加参数就是只替换第一个
sed -i "s/huawei/apple/" huawei.txt
实现效果:
三、替换每行所有的xiaomi为iphone,第三个“/”后,加参数g就是替换所有
sed -i "s/xiaomi/iphone/g" huawei.txt
实现效果:
四、替换每行第二个redmi为potato,第三个“/”后,加参数2就是替换第2个
sed -i "s/redmi/potato/2"
五、替换每行第二个mate到最后一个mate,为pico,第三个“/”后,加参数2g就是替换第2至最后
sed -i "s/mate/pico/2g"
六、替换每行前两个KFC为CPU
sed -i "s/KFC/CPU/"
sed -i "s/KFC/CPU/"
先替换第一个,此时原本的第二个字符串从顺序上来说变成了第一个,就再替换一次
(以上的操作范围为每一行,接下来我们精确筛选需要修改的特定行or第几行,方便演示我们就只改变特定行的第一个字符串。也就是不加“g”)
七、替换第二行的第一个HBW为MDL
sed -i "2s/HBW/MDL/" HBW.txt
八、替换第二行到最后一行的HBW为MDL(符号$表示最后一行,如果写数字就代表到第几行)
sed -i '2,$s/HBW/MDL/' HBW.txt
注意当语句中使用逗号","时,语句外就必须使用单引号
(以上都是针对特定字符串本身的替换,接下来我们修改行首或行尾).
九、给第一行行首加上chicken(符号^代表行首)
sed -i '1s/^/chicken/' ktv.txt
十、给第一行行尾加上beautiful(符号$代表行尾)
sed -i '1s/$/beautiful/' ktv.txt
(使用sed -i命令直接修改文件后,后悔了怎么办?可以加上参数-i.bak,就会修改的同时创建备份)
十一、给每行行首加上chicken,同时创建备份文件(备份还没有写入chicken的文件)
sed -i.bak 's/^/chicken/' aaa.txt
十二、多个替换动作,用分号;隔开可以一起执行
同时给所有行首加上top,给所有行尾加上bottom(注意没有调用-i参数,修改结果不会写入文件
sed 's/^/top/;s/$/bottom/' aaa.txt
十三、如果需要替换的字符串包含单引号‘,那么就使用双引号来包围参数
替换每行的n’a为na,(注意为了方便没有使用-i参数,修改结果不会写入文件)
sed "s/n'a/na/" aaa.txt
十四、斜杠/本身是作为sed语句中的分隔符,但如果需要替换的字符串里也包含斜杠/,那么可以用井号#来做分隔符(还可以用问号?)
替换n/a为na,(没有调用参数-i,修改结果不会写入文件)
sed "s#n/a#na#" aaa.txt
sed "s?n/a?na?" aaa.txt
十五、在第一行、最后一行、倒数一行增加内容。
(不需要去找某个关键词了,有点像“无中生有”,想在不破坏原来内容的情况下,添加新内容,用这种命令比较好。)
# 在第一行前插入一行,即成为第一行的内容
[root@localhost ~]# sed -i '1i first line' test.txt
(没有加参数-i,不会真的改变文本内容)
# 在最后一行前插入一行,即成为倒数第二行的内容
[root@localhost ~]# sed -i '$i next-to-last line' test.txt
(没有加参数-i,不会真的改变文本内容)
# 在最后一行后插入一行,即成为最一行的内容
[root@localhost ~]# sed -i '$a last line' test.txt
(没有加参数-i,不会真的改变文本内容)
感悟:sed的方便在之处在于你可以快速定位编辑文档内容中的某个关键词(你已知那个字符串),但是对于未知字符串就很难直接用sed解决。如密码本,我想替换所有密码,但它们都是随机字符串,假如文件内容是“password:12345678;password:22345678;……”,那么我能够定位的只能是“password:”和“;”,如何继续去替换非固定的“12345678”还需要研究,欢迎大神留言指教
来源地址:https://blog.csdn.net/weixin_44576709/article/details/127847817
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341