1.grep [Globally search a Regular Expression and Print]
grep命令是一个Linux文本处理工具,它与egrep命令属于同一系列,这些命令都是用于对文件和文本执行重复搜索任务的工具。我们可以通过grep命令指定特定搜索条件来搜索文件及其内容以获取有用的信息。grep是全局搜索正则表达式并打印出匹配的行,其抓取数据是贪婪模式,即不会漏掉过滤内容,但准确性会相对降低。
grep
grep -E = egrep
grep 匹配条件 处理文件名称
grep root passwd ##过滤root关键字所在的行
grep -i root passwd ##忽略大小写过滤root关键字所在的行
grep -E "\<root" passwd ##过滤root字符之前没有字符的行
grep -E "root\>" passwd ##过滤root字符之后没有字符的行
grep -数字 ##显示过滤行以及上面几行和下面几行
grep -n ##显示匹配的行所在行号
grep -A数字 ##显示过滤行以及下面几行
grep -B数字 ##显示过滤行以及上面几行
grep -v ##反向过滤 不含该关键字的行
正则表达式 含义
^westos 以westos关键字开头
westos$ 以westos结尾
w…s w开头s结尾中间含有3个任意字符
…s s结尾前面有3个任意字符
* 字符出现次数任意(即0次到任意次)
? 字符出现0到1次
+ 字符出现1次到任意次
{n} 字符出现n次
{m,n} 字符出现m到n次
{,n} 字符出现0到n次
{m,} 字符最少出现m次
练习脚本:
请显示系统中能被su命令切换的用户名称
2.sed
sed 全名叫 stream editor即流编辑器,与 vim 的交互式编辑方式截然不同,作为一种非交互式编辑器,sed使用预先设定好的编辑指令对输入的文本进行编辑,完成之后输出编辑结果。其功能十分强大,加上正则表达式的支持,可以进行大量的复杂文本的编辑操作。
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
p 显示
sed -n 5p westos ##显示第5行
sed -n 3,5p westos ##显示第3行到第5行
sed -n "3p;5p" westos ##显示第3行和第5行
sed -n 1,5p westos ##显示1-5行
sed -n '5,$p' westos ##显示第5行到最后一行
sed -n '/^#/p' fstab ##显示以#开头的行
d 删除
sed 5d passwd ##删除第5行
sed '/^c/d' passwd ##把以c开头的行删除
sed -e '5,$d' passwd ##删除第5行到最后一行
sed '/^r/!d' passwd ##删除不是以r开头的所有行
c ##替换
sed -e '/^#/c hello world' fstab
sed '5chello world' westos
w ##把符合的行写到指定文件中
sed '/^UUID/w westofile' westos ##把westos中UUID开头的行写入westosfile中
i ##插入
sed '5ihello westos' westos
r
sed '3rtest' fstab 将test文件内容整合到fstab文件第三行之后
sed 字符替换
注意:以上所有的操作均无法在文件中保存,下面这个方法能保存到文件
sed 's@/@###@g' -i passwd 保存到文件
练习及脚本
Apache_port.sh
此脚本接入数字
http的端口就改为此数字
假设selinux为关闭状态
例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080
apache的端口会被修改为8080
3.awk
awk -F 分隔符 BEGIN{ }{ }END{ } FILENAME
NR ##行数
NF ##列数
FILENAME ##文件名称本身
westos ##westos变量值
“westos” ##westos字符串
/bash$/ ##条件
/条件1|条件2/ ##条件1或者条件2
/条件1/||/条件2/ ##条件1或者条件2
/条件1/&&/条件2/ ##条件1并且条件2
$0 ##所有的列
$1 ##第一列
$2 ##第二列
$3 ##第三列
awk -F : '{print NR}' /mnt/passwd 行号
awk -F : '{print NF}' /mnt/passwd 每行有几列
awk -F : '{print FILENAME}' /mnt/passwd 处理的文件名称
awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' /mnt/passwd 每行变量+1,输出最终变量直
awk -F : '/nologin$/{print $1,$3}' /mnt/passwd nologin结尾的
awk -F : '/nologin$/||/^root/{print $1,$3}' /mnt/passwd
awk -F : '$7!~/bash$/{print $0}' /mnt/passwd 不是bash结尾
#/etc/passwd文件的第六列没有home关键字并且以bash结尾的行
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
课后练习:
统计在系统中能su切换的并且用户加目录不在/home下的用户数量
运行脚本将文件里面的用户全部建立出来