一 grep(文本过滤命令):
GREP是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。
grep命令基本用法
grep命令是支持正则表达式的一个多用途文本搜索工具,grep的一般格式为:grep [选项] [模式] [文件...]
grep命令由选项、模式和文件三部分组成,它在一个或多个文件中搜索满足模式的文本行,模式后的所有字符串被看做文件名,文件名可以有多个,搜索的结果被打印到屏幕,不影响原文件的内容。Grep命令的选项用于对搜索过程进行补充说明。
grep常用过滤模式:
为了演示效果,将/etc/passwd文件复制到/mnt目录下,添加些许内容比如大写字母开头的行来进行文件内容过滤:
-v参数的作用:过滤指定条件之外的内容:
通过对-v参数的使用过滤出以root开头或结尾以外的行,进一步就可以过滤出root在中间的行:
grep的其他用法:过滤指定字符:
为了实验效果,创建一个文件并写入一下内容:
grep过滤字符的效果演示:
grep指令的应用:
1 过滤主机ip:
2 编写脚本,过滤出可以登录系统的用户名:
在/etc/shells文件内,有着关于可以登录系统用户的信息,其中nolgoin一行表示无法登录系统:
使用-v过滤出nologin以外的行,即可登陆系统的用户的状态:
编辑脚本,将过滤出的内容里面的空格替换成|并作为输入条件进行对/etc/passwd文件的过滤,对于过滤结果,指定分隔符为:并只打印输出第一列:
执行脚本,可以看到可登录系统的用户了:
二 sed(行编辑器)
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed命令格式: sed [options] command file
1 sed的a模式(添加模式)
新建文件并写入内容hello:
在添加内容时,指定所要添加的行,a后面跟要添加的内容。比如在hello后面添加world并换行添加westos。
除了a可以添加,i也可以添加。a和i的区别在于,a是在指定内容的后面添加,i是在指定内容的前面添加:
2 sed的c模式(修改模式)
sed的c模式和a模式类似,即在指定行后,c后面跟修改之后的内容。
3 sed的d模式(不显示模式)
将/etc/fstab文件复制到/mnt目录下,cat -n进行标明行号的查看,'2d;6d'即sed的d模式功能,表示不显示第2行和第6行:
不显示以#开头的行:
不显示空行:
4 sed的p模式(显示模式):
只显示以#开头的行:
显示不以#开头的行。其中!的作用是不显示前面指定的条件的行:
显示2-6行:
显示第2行和第6行:
显示除第2行和第6行以外的内容。这个操作也可以用d模式实现,在用p模式的时候,每一行的输出结果都会打印两遍,需要使用指令uniq -d 只显示重复的行也就是只显示一遍:
5 sed结果的保存:
对于sed结果的保存有两种方式,一种是使用追加或者重定向的方式将结果保存到文件,一种是sed的w模式直接在w后面跟保存的文件名。
两种方式的区别在于:>是两个程序,在全部输出之后保存到文件
w模式是一个程序,输出一个结果保存一个结果
6 使用sed进行脚本功能的实现:
1 在两个文件内分别写入用户名和密码,编写脚本进行用户的建立并设置对应的密码
脚本内容的书写:大致思路是先统计用户名文件的行数,然后使用for循环每次使用用户名文件中的用户名和对应的密码进行用户的建立。sed在脚本中的功能是将指定行打印输出作为useradd和passwd命令的输入。
脚本的执行:用户建立和密码设置成功
2 编辑脚本修改http服务的端口:
对于http服务的端口,在/etc/httpd/conf/httpd.conf文件中,Listen 80一行即是http服务所使用的端口。sed在此处的作用为,将以Listen开头的一行内容修改为Listen $1,并在修改之后将42行也就是Listen这一行显示出来。脚本中-i的作用是对原配置文件进行永久性修改,如果没有-i参数,那么配置文件本身不会被修改,当然端口也无法修改了。
脚本的执行: 将端口改为666,修改成功并查看到配置文件的42行为Listen 666:
三 awk(报告生成器):
1 awk处理机制:
awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性工作,在命令格式上体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本进行相应的处理,是最常见的编辑指令块
END{}:处理完最后一行文本之后执行,一般用来处理输出结果
awk的常用指令模式:
指令演示:
输出行号的显示:
将passwd文件中以a开头且以nologin结尾的行输出第1列和第6列:
2 awk指令的功能实现:
1 输出ip:
2 统计文件行数: