shell编程四剑客之SED

shell编程四剑客之SED

  • SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容Sed可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等
  • 在处理文本时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),紧接着用SED命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件
  • 逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件。其语法参数格式为:
sed    [-Options]     [‘Commands’]    filename;
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数即对文件彻底修改;
x                   			#x为指定行号;
x,y                 		    #指定从x到y的行号范围;
/pattern/           		    #查询包含模式的行;
/pattern/pattern/   		    #查询包含两个模式的行;
/pattern/,x         		    #从与pattern的匹配行到x号行之间的行;
x,/pattern/         		    #从x号行到与pattern的匹配行之间的行;
x,y!                		    #查询不包括x和y行号的行;
r                				#从另一个文件中读文件;
w                				#将文本写入到一个文件;
y                				#变换字符;
q             					#第一个模式匹配完成后退出;
l                				#显示与八进制ASCII码等价的控制字符;
{}              			    #在定位行执行的命令组;
p                				#打印匹配行;
=                				#打印文件行号;
a\              			    #在定位行号之后追加文本信息;
i\              			    #在定位行号之前插入文本信息;
d                				#删除定位行;
c\              			    #用新文本替换定位文本;
s                				#使用替换模式替换相应模式;
n                				#读取下一个输入行,用下一个命令处理新的行;
N                         		#将当前读入行的下一行读取到当前的模式空间。

1. 常用SED工具企业演练案列:

1.1. 替换test.txt文本中root为admin

[root@localhost ~]# cat test.txt 
192.168.2.1  root  123456
192.168.2.2  root  123456
192.168.2.3  root  123456
192.168.2.4  admin 123456
[root@localhost ~]# sed 's/root/admin/g' test.txt 
192.168.2.1  admin  123456
192.168.2.2  admin  123456
192.168.2.3  admin  123456
192.168.2.4  admin 123456
#从这里可以看得出来上面的命令只是把你的操作放在临时缓冲区了
[root@localhost ~]# cat test.txt 
192.168.2.1  root  123456
192.168.2.2  root  123456
192.168.2.3  root  123456
192.168.2.4  admin 123456
#这里加个-i指令就可以了
[root@localhost ~]# sed -i  's/root/admin/g' test.txt 
[root@localhost ~]# cat test.txt
192.168.2.1  admin  123456
192.168.2.2  admin  123456
192.168.2.3  admin  123456
192.168.2.4  admin 123456
加了-i参数才可以把内容真正的修改到文本文件中,不加参数可以作为测试用
##替换第二行的admin换成root
[root@localhost ~]# sed  '2{s/root/admin/}' test.txt
192.168.2.1  root  123456
192.168.2.2  admin  123456
192.168.2.3  root  123456
192.168.2.4  root 123456
##替换第二行内容为hello
[root@localhost ~]# sed '2c hello' test.txt
192.168.2.1  root  123456
hello
192.168.2.3  root  123456
192.168.2.4  root 123456

1.2. 打印test.txt文本第一行至第三行:

[root@localhost ~]# sed -n '1,3p' test.txt 
192.168.2.1  admin  123456
192.168.2.2  admin  123456
192.168.2.3  admin  123456
或者:
[root@localhost ~]# head -3 test.txt 
192.168.2.1  admin  123456
192.168.2.2  admin  123456
192.168.2.3  admin  123456

1.3. 打印jfedu.txt文本中第一行与最后一行:

[root@localhost ~]# sed -n '1p;$p' test.txt 
192.168.2.1  admin  123456
192.168.2.4  admin 123456
或者:
[root@localhost ~]# head -1 test.txt && tail -1 test.txt 
192.168.2.1  admin  123456
192.168.2.4  admin 123456

1.4. 删除test.txt第一行至第三行、删除匹配行至最后一行:

[root@localhost ~]# sed -i '1,3d' test.txt 

[root@localhost ~]# sed -i '/admin/,$d' test.txt 

1.5. 删除test.txt最后6行及删除最后一行:

[root@localhost ~]# for i in `seq 1 6`;do sed -i '$d' test.txt;done

[root@localhost ~]# sed -i '$d' test.txt

1.6. 在test.txt查找192.168.2.3所在行,并在其下一行添加字符hello word,a表示在其下一行添加字符串:

[root@localhost ~]# sed -i '/192.168.2.3/ahello word' test.txt

1.7. 在test.txt查找192.168.2.2所在行,并在其上一行添加hello word字符,i表示在其上一行添加字符串:

[root@localhost ~]# sed -i '/192.168.2.3/ihello word' test.txt

1.8. 在test.txt查找以192.1682.2开头的192.168.2.2后面添加字符串hello word,^表示开头标识,&在Sed中表示添加:

[root@localhost ~]# sed -i 's/^192.168.2.3/& hello word/g'' test.txt

1.9. 在test.txt查找以123456结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:

[root@localhost ~]# sed -i 's/123456$/& word/g' test.txt

1.10. 在test.txt查找admin的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:

[root@localhost ~]# sed -i '/admin/s/^/&word /g' test.txt

1.11. 多个sed命令组合,使用-e参数:

[root@localhost ~]# sed  -i -e '/root/s/^/&1./' -e '/root/s/$/&./' test.txt 

1.12. 多个sed命令组合,使用分号“;”分割:

[root@localhost ~]# sed  -i  '/root/s/^/&1./;/root/s/$/&./' test.txt 

1.13. Sed读取变量,变量替换:

user=admin
[root@localhost ~]# sed -i "s/root/$user/g" test.txt

1.14. 修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled:


[root@localhost ~]# sed -i "/SELINUX/s/enforcing/disabled/" /etc/selinux/config

1.15. 合并上下两行,也即两行合并

[root@localhost ~]# sed    'N;s/\n/ /'        test.txt

1.16. 替换第二行的admin为root

[root@localhost ~]# sed -i '2s/admin/root/g  test.txt

1.17. 将用户访问次数超过1000次IP加入Linux黑名单;

sed -n '/2020:09:00/,/2020:11:00/p' access_20200602.log|grep -oE "^([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -n|uniq -c|sort -nr|awk '{if(($1>=1000)) print $0}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值