shell编程四剑客之SED
SED是一个非交互式文本编辑器 ,它可对文本文件和标准输入进行编辑 ,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与VIM编辑器类似 ,它一次处理一行内容 ,Sed可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等 。 在处理文本时把当前处理的行存储在临时缓冲区中 ,称为“模式空间 ”(pattern space),紧接着用SED命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件 。 逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件。其语法参数格式 为:
sed [ -Options] [ ‘Commands’] filename;
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数即对文件彻底修改;
x
x,y
/pattern/
/pattern/pattern/
/pattern/,x
x,/pattern/
x,y!
r
w
y
q
l
{ }
p
=
a\
i\
d
c\
s
n
N
1. 常用SED工具企业演练案列:
1.1. 替换test.txt文本中root为admin
[ root@localhost ~]
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 ~]
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 ~]
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 ~]
[ root@localhost ~]
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参数才可以把内容真正的修改到文本文件中,不加参数可以作为测试用
[ root@localhost ~]
192.168 .2.1 root 123456
192.168 .2.2 admin 123456
192.168 .2.3 root 123456
192.168 .2.4 root 123456
[ root@localhost ~]
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 ~]
192.168 .2.1 admin 123456
192.168 .2.2 admin 123456
192.168 .2.3 admin 123456
或者:
[ root@localhost ~]
192.168 .2.1 admin 123456
192.168 .2.2 admin 123456
192.168 .2.3 admin 123456
1.3. 打印jfedu.txt文本中第一行与最后一行:
[ root@localhost ~]
192.168 .2.1 admin 123456
192.168 .2.4 admin 123456
或者:
[ root@localhost ~]
192.168 .2.1 admin 123456
192.168 .2.4 admin 123456
1.4. 删除test.txt第一行至第三行、删除匹配行至最后一行:
[ root@localhost ~]
[ root@localhost ~]
1.5. 删除test.txt最后6行及删除最后一行:
[ root@localhost ~]
[ root@localhost ~]
1.6. 在test.txt查找192.168.2.3所在行,并在其下一行添加字符hello word,a表示在其下一行添加字符串:
[ root@localhost ~]
1.7. 在test.txt查找192.168.2.2所在行,并在其上一行添加hello word字符,i表示在其上一行添加字符串:
[ root@localhost ~]
1.8. 在test.txt查找以192.1682.2开头的192.168.2.2后面添加字符串hello word,^表示开头标识,&在Sed中表示添加:
[ root@localhost ~]
1.9. 在test.txt查找以123456结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:
[ root@localhost ~]
1.10. 在test.txt查找admin的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
[ root@localhost ~]
1.11. 多个sed命令组合,使用-e参数:
[ root@localhost ~]
1.12. 多个sed命令组合,使用分号“;”分割:
[ root@localhost ~]
1.13. Sed读取变量,变量替换:
user = admin
[ root@localhost ~]
1.14. 修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled:
[ root@localhost ~]
1.15. 合并上下两行,也即两行合并
[ root@localhost ~]
1.16. 替换第二行的admin为root
[ root@localhost ~]
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}'