一。语法:
1.直接修改源文件:sed -i 's/原字符串/替换字符/' filename or ‘grep xxx’
2.不修改源文件,只在屏幕上输出:sed -e 's/原字符串/替换字符/' filename or ‘grep xxx’
3. 执行sed脚本:sed -f “xxx”
二。写法注意事项:
1. 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线””进行转义
2.命令中的三根斜线分隔符可以换成别的符号,有时候替换目录字符串的时候有较多斜线,这个时候换成其它的分割符是较为方便,只需要紧跟s定义即可,例如,冒号,#等:sed 's?原字符串?替换字符串?'
3.单引号” ‘ ’”是没有办法用反斜线””转义的,这时候只要把命令中的单引号改为双引号就行了,格式如下:sed "s/原字符串包含'/替换字符串包含'/"
4.同时执行两个替换写法:sed -i 's/^/添加的头部&/g;s/$/&添加的尾部/g'
5.一些特殊字符的使用
”^”表示行首
”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行)
三。使用场景:
1. 对文件中所有匹配到的原字符串全部做替换:
sed -i 's/原字符串/替换字符串/g' filename
在 s 命令里以 g 结尾表示的是:全局性,意即“替代文本取代正则表达式中每一个匹配的”。如果没有设置 g,sed 只会取代每行第一个匹配的。
2. 对文件中某一行/某几行匹配到的做全部替换:
sed -i '2s/原字符串/替换字符串/g' #替换第2行
sed -i '2,5s/原字符串/替换字符串/g' #替换2到5行
3. 对文件中某一行/某几行匹配到的第几个做替换:
sed -i '3,5s/filter/haha/2' test.log #将 test.log 文件中第 3-5 行的第 2 个“filter”替换成“haha”
4. 行首,行尾,及文件末的替换
sed 's/^/添加的头部&/g' #在所有行首添加
sed 's/$/&添加的尾部/g' #在所有行末添加
sed '$s/原字符串/替换字符串/g' #替换最后一行
5. 整行替换:
sed -e '1c/#!/bin/more' file
(把第一行替换成#!/bin/more)
思考:把第 n 行替换成 just do it sed -e 'nc/just do it' file
sed -e '1,10c/I can do it' file
(把 1 到 10 行替换成一行: I can do it)
思考:换成两行(I can do it! Let's start) sed -e '1,10c/I can do it!/nLet'"/'"'s start' file
6. 用sed删除字符或换
6.1删除行首空格
sed -i 's/^ //g' test
6.2删除行尾空格
sed -i 's/ $//g' test
7. 同时插入多行:
sed -i 's/spec:/spec: gateways: - bookinfo-gateway/g' virtual-service-all-v1.yaml