16_Shell好用工具:sed
零、语法解析
sed [选项参数] [模式匹配/sed命令] 文件
命令 | 说明 |
---|---|
a | add,新增 |
i | insert,新增 |
c | change,修改 |
s | substitute,替换 |
d | delete,删除 |
p | print, 打印 通常与 -n 连用 |
一、增(新增行)
1.1、【添加数据】指定行号后添加数据
#第3行后添加一行
sed '3aHello World.' sed.txt
1.2、【添加数据】指定行号前添加数据
#第3行前添加一行
sed '3iHello World.' sed.txt
1.3、【添加数据】指定内容行前后添加数据(前:i 后:a)
#包含Holen的行之前添加一行
sed '/Holen/iHello World.' sed.txt
#包含Holen的行之后添加一行
sed '/Holen/aHello World.' sed.txt
1.4、【添加数据】最后一行前后添加数据(前:i 后:a)
#最后一行前添加一行
sed '$iHello World.' sed.txt
#最后一行后添加一行
sed '$aHello World.' sed.txt
二、删(删除行)
2.1、【删除数据】删除指定行号数据
#删除第二行数据
sed '2d' sed.txt
2.2、【删除数据】删除指定间隔行数据
#从第一行开始,每隔两行删除行数据(删除奇数行数据 1、3、5...)
sed '1~2d' sed.txt
2.3、【删除数据】删除指定范围行数据
#删除第1到第5行数据
sed '1,5d' sed.txt
2.4、【删除数据】删除数据时取反
#删除第1到第5行数据 取反
sed '1,5!d' sed.txt
2.5、【删除数据】删除最后一行
#删除最后一行
sed '$d' sed.txt
2.6、【删除数据】删除指定内容行
#删除包含Holen的行
sed '/Holen/d' sed.txt
2.7、【删除数据】删除指定内容行到最后一行
#删除包含Holen的行到最后一行,全删
sed '/Holen/,$d' sed.txt
2.8、【删除数据】删除指定内容行及下一行
#删除包含Holen的行及下一行
sed '/Holen/,+1d' sed.txt
2.9、【删除数据】删除不匹配行
#删除不包含Holen或者Happy的行
sed '/Holen\|Happy/!d' sed.txt
三、改(修改-整行 替换-行内数据)
3.1、【修改数据-整行】修改指定行
#修改第一行为"Hello World"
sed '1cHello World.' sed.txt
3.2、【修改数据-整行】修改最后一行
#修改最后一行为"Hello World"
sed '$cHello World.' sed.txt
3.3、【修改数据-整行】指定内容行修改
#将包含Holen的行整体修改为China
sed '/Holen/cChina.' sed.txt
3.4、【替换数据-行内数据】每行指定内容数据替换
#替换每行第1个出现的Holen为Ylia
sed 's/Holen/Ylia/' sed.txt
#替换每行第2个出现的Holen为Ylia
sed 's/Holen/Ylia/2' sed.txt
#替换每行所有的Holen为Ylia
sed 's/Holen/Ylia/g' sed.txt
3.5、【替换数据-行内数据】每行指定内容数据替换并写入文件
#替换每行所有的Holen为Ylia 并 写入文件 sed_new.txt
sed 's/Holen/Ylia/gw sed_new.txt' sed.txt
3.6、【替换数据-行内数据】正则表达式数据替换
#匹配包含H的行,并替换o后面内容为空
sed '/H/s/o*//g' sed.txt
3.7、【替换数据-行内数据】每行末尾添加数据
#每行末尾添加 CH
sed '/s/$/& CH' sed.txt
#这样也可以
sed 's/$/ CH/' sed.txt
3.8、【替换数据-行内数据】每行行首添加数据
#每行行首添加 #
sed 's/^/# /' sed.txt
四、查(略)
不推荐,建议使用grep,不过多深究
五、其他重要命令
选项参数 | 说明 |
---|---|
-i | 修改内容同步更新源文件 |
-e | 多命令执行 |
5.1、多命令执行
#删除第一行同时最后一行新增“Hi Holen”
#写法一:
sed -e '1d' -e '$aHi Holen' sed.txt
#写法二:
sed '1d;$aHi Holen' sed.txt
5.2、源文件修改
#第三行后添加Hello World 同时写入源文件
sed -i '3aHello world' sed.txt