linux sed命令

9.sed命令讲解及使用

9.1 Sed应用讲解

Sed应用是一个非交互性的文件编辑器,他编辑文件或拷贝文件。sed随便编辑小或大的文件,并允许做某项任务时不在现场。你可以通过shell里面调用sed去定时任务去修改配置文件,

强调:是一个过滤,过滤出整行的内容,他是行为单位

9.2 sed命令讲解

-n显示行号

[root@cat7 vsftpd]# sed -n '12p' vsftpd.conf

anonymous_enable=YES
显示行号的范围

[root@cat7 vsftpd]# sed -n '117,128p' vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
匹配单词并打出所在的行

[root@cat7 vsftpd]# sed -n '/chown_uploads/'p  vsftpd.conf
#chown_uploads=YES

打印出整个文档 $表示最后一行

[root@cat7 vsftpd]# sed -n ‘1,$p’ vsftpd.conf

在这里插入图片描述

本 身 对 s e d 代 表 一 种 含 意 ( 表 示 最 后 一 行 ) 。 对 于 本身对sed代表一种含意(表示最后一行)。对于 sed本身,如何过滤出$的行

错误示范: 还是将全文打印了出来

[root@cat7 vsftpd]# sed -n ‘/$/p’ vsftpd.conf

在这里插入图片描述

要让$字符失去意义(表示最后一行), 需要使用\$表示$字符本身

[root@cat7 vsftpd]# sed -n '/\$/'p  vsftpd.conf
#$good luck you!
[root@cat7 vsftpd]#

在这里插入图片描述
正则表达式:

. * .*ing :以ing结尾的任意单词

打印行号,使用 = 打印模式匹配的行号 使用 /pattern/=

[root@cat7 vsftpd]# sed ‘/settings/=’ vsftpd.conf

在这里插入图片描述

还是会将全文打印出来 会在匹配字段前方打印出行号 不打印其他行号

若无匹配默认,默认打印出全部行号

只打印行号不打印内容

[root@cat7 vsftpd]# sed -n '/settings/=' vsftpd.conf
3
[root@cat7 vsftpd]#
-e接多个模式/pattern/=

[root@cat7 vsftpd]# sed -n  -e '/settings/=' -e  '/mirror/=' -e '/listen/='
 vsftpd.conf
3
103
107
108
109
110
112
114
115

9.3 使用sed脚本实现增加,插入,修改

9.3.1 可以使实现一个脚本来修改增删配置文件

#! /bin/sed -f
/pam_service_name a\ #/pattern/匹配的单词,a代表的是add,代##表匹配哪一行向下增加内容
userlist_enable=NO #增加的内容

[root@cat7 mytest]# ./add.sed /etc/vsftpd/vsftpd.conf

在这里插入图片描述

9.3.2 指定在哪一行之前进行插入配置

[root@cat7 mytest]# vi insert.sh

#!bin/sed -f
100 i\  #100指的是配置文件的行号,i代表的是插入
userlist_deny=NO #修改的内容

在这里插入图片描述

9.3.3 对配置文件进行修改

9.3.3.1 匹配某一行并进行修改

[root@cat7 mytest]# cat modify.sh
#!/bin/sed -f
/#ls_recurse_enable=YES/ c\
ls_recurse_enable=YES
[root@cat7 mytest]# chmod  u+x modify.sh
[root@cat7 mytest]# ./modify.sh  /etc/vsftpd/vsftpd.conf

在这里插入图片描述

9.3.3.2 指定某一行进行修改
[root@cat7 mytest]# cat modify.sh
#!/bin/sed -f
115  c\
listen_ipv6=YES
[root@cat7 mytest]# ./modify.sh  /etc/vsftpd/vsftpd.conf

在这里插入图片描述

9.3.3.3 对配置文件的一行进行过滤
[root@cat7 mytest]# sed   '119d'  /etc/vsftpd/vsftpd.conf

#过滤指定的行

在这里插入图片描述

[root@cat7 mytest]# sed '/listen_ipv6/d' /etc/vsftpd/vsftpd.conf  

#匹配关键字进行过滤

在这里插入图片描述

9.3.3.4 对匹配行的关键字进行替换

[root@cat7 mytest]# sed ‘118s/YES/NO/g’ /etc/vsftpd/vsftpd.conf

‘118s/YES/NO/g’

118为118行,/YES/NO/匹配118行的YES将YES替换为NO,g代表的是全局(一行如果有多个YES全部替换为NO)

在这里插入图片描述

指定修改哪一行,某一个单字符

[root@cat7 mytest]# sed '118s/t_en/t_on/g' /etc/vsftpd/vsftpd.conf

在这里插入图片描述

[root@cat7 mytest]# sed ‘117s/p/d/2’ /etc/vsftpd/vsftpd.conf

#修改117行,将这一行里面的第二个p改为d

在这里插入图片描述

9.3.4 综合:实现增加 插入 修改 注释功能脚本在一个脚本里面

[root@cat7 mytest]# vi max.sed
[root@cat7 mytest]# cat max.sed
#! /bin/sed -f
#version 1.0
#this is functiona for add
117 a\
userlist_deny=NO

#this is function for modify
115 c\
listen_ipv6=YES

#this is function for insert
119 i\
max_clients+1000

#this is function for note
117 c\

#pam_service_name=vsftp


在这里插入图片描述

9.3.4 sed达到目标

能够对配置文件的任意位置进行修改。并能够脚本方法去修改配置文件(实现增加 插入 修改 注释功能脚本在一个脚本里面)

修改并保存文件: sed -i 参数 文件
在这里插入图片描述
修改并保存备份原文件: sed -i.bak 参数 文件

在这里插入图片描述

如果想在一条命令里面修改配置文件,如果修改参数过多,-e,删除 修改 替换 增加。

可以使用管道 或者

在指定一行出入数据

[root@cat7 mytest]# sed '3a****' named.conf
lucky you
daiv  lili gogogo
dnssec marry   mike dream

#在第三行后添加数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值