1.首先介绍sed的作用
学习任何语法都要先学习格式,对格式理解才能更好的利用语法 *****
1)查找过滤文件内容
2)替换内容 直接替换
3)如果内容输出到屏幕 临时替换 屏幕上显示的内容替换 但是不影响源文件
4)如果内容不显示到屏幕 则替换源文件
5)增删改查
2.sed常用的参数
-r 支持扩展正则
-i 替换文件中的内容
-n 取消默认输出
3.sed的语法格式
学习任何语法都要先学习格式,对格式理解才能更好的利用语法 *****
语法格式:
sed '动作' 文件
sed '模式 动作' 文件
sed '过滤内容 动作' 文件
sed '要找的内容 干啥' 文件
4.sed的实际操作
01.sed查找过滤文件内容
精确匹配行
语法:
sed 'np' file # 显示文件中的第n行 n为数字
-n 取消默认输出
02.模糊匹配 在sed中n就有p、np连用*****
语法:
sed -n '/过滤的内容/p'
// #模式 需要过滤的内容查找的内容
p #print 打印输出到屏幕
逗号表示范围 字符串之间的范围
sed -n '//,//p' file
比如我们取日志指点的时间内的信息
1月25号早上8点30到9点的信息
[root@wish-10.0.0.200-15:50:05~ ]#sed -n '/Jan 25 08:30:01/,/Jan 25 09:00:01/p' /var/log/messages
Jan 25 08:30:01 wish-10 systemd: Started Session 1070 of user root.
Jan 25 08:30:01 wish-10 systemd: Starting Session 1070 of user root.
Jan 25 08:35:01 wish-10 systemd: Started Session 1071 of user root.
Jan 25 08:35:01 wish-10 systemd: Starting Session 1071 of user root.
Jan 25 08:40:01 wish-10 systemd: Started Session 1072 of user root.
Jan 25 08:40:01 wish-10 systemd: Starting Session 1072 of user root.
Jan 25 08:45:01 wish-10 systemd: Started Session 1073 of user root.
Jan 25 08:45:01 wish-10 systemd: Starting Session 1073 of user root.
Jan 25 08:50:01 wish-10 systemd: Started Session 1074 of user root.
Jan 25 08:50:01 wish-10 systemd: Starting Session 1074 of user root.
Jan 25 08:55:01 wish-10 systemd: Started Session 1075 of user root.
Jan 25 08:55:01 wish-10 systemd: Starting Session 1075 of user root.
Jan 25 09:00:01 wish-10 systemd: Started Session 1076 of user root.
03.sed之增加内容
-a append 追加内容/指定某行追加内容
-i insert 插入内容/指定某行插入内容
-c change 替换内容/指定某行替换
sed 'na 内容' 1.txt #n就代表第几行
sed '2i 内容' 1.txt
sed '2c 内容' 1.txt
这种修改都是临时修改 在屏幕上修改了 但是不影响源文件、加上参数-i才能真正被修改到文件内容里面
04.替换内容、替换字符串、替换单词
格式:
sed 's#找谁#替换成谁#g' file # 临时替换/把替换的内容输出到屏幕上
sed -i 's#找谁#替换成谁#g' file # 永久替换
利用sed把1,10行前面加上注释
sed -i '1,10s/^/#/g' passwd
05.sed之删除
d 删除动作
sed -i 修改文件中的内容,不加-i 只在屏幕上显示动作后的内容
删除1到10行
sed -i '1,10d' file
删除7到最后一行
sed -i '7,$' file
删除和wish有关的行
sed -i '/wish/d' file
06.sed后项引用前向
想要输出的内容经过正则匹配使用()保护起来
输出的时候1就是显示第一个()中的内容 2显示第二个()的内容
sed -r 's#()#1#g' file
利用后项引用取出ip地址
[root@wish-10.0.0.200-16:12:48~ ]#ifconfig eth0|sed -rn '2s/^.*inet (.*) netm.*$/1/gp'
10.0.0.200
利用后项引用取出ip地址和netmask
[root@wish-10.0.0.200-16:15:10~ ]#ifconfig eth0|sed -nr '2s/^.*inet (.*) netmask (.*) bro.*$/12/gp'
10.0.0.200 255.255.255.0