目录
一.grep :
grep ##支持基本正则表达式
egrep ##基础和扩展的正则表达式都支持
egrep = grep -E
-E ##搜索含有rot和nologin的行 grep -E "root|nologin" passwd
-e ##搜索含有rot和nologin的行 grep -e root -e nologin passwd
-i ##忽略大小写 grep -i root passwd
-E\< ##被搜索字符前不能有字符 grep -E "\<root" passwd
-E\> ##被搜索字符后不能有字符 grep -E "root\>" passwd
-n ##显示搜索字符所在的行号和内容 grep -n halt passwd
-5 ##显示搜索字符所在的内容一起前5行和后5行 grep -5 halt passwd
-B5 ##显示含有关键字的行及上5行 grep -B5 halt passwd
-A5 ##显示含有关键字的行及下5行 grep -A5 halt passwd
-v ##反向过滤 grep root passwd -v
^root ##以root开头的 grep ^root passwd
root$ ##以root结尾的 grep root$ passwd
w....s ##以w开头s结尾中间四个任意字符 grep w....s westos
.....s ##s结尾前面五个任意字符
* ##字符出现任意
? ##0到1次 grep -E "wa?s" westos
+ ##1次到任意次 grep -E "wa+s" westos
{n} ##n次 grep -E "wa{1,}s" westos
{m,n} ##m到n次 grep -E "wa{1,2}s" westos
{0,n} ##0-n次
{,n} ##0-n次 grep -E "wa{,2}s" westos
{m,} 最少m次 grep -E "wa{1,}s" westos
(ab){2} ##ab字符串出现两次 grep -E "w(ab){2,}s" westos
二.sed :
sed 's/nologin/westos/g' passwd ##把passwd文件中的nologin全换成westos
或者 vim rule
s/nologin/westos/g
sed -f rule passwd ##等同sed 's/nologin/westos/g' passwd
p ##显示
sed 5p passwd ##打印第五行
sed -n 5p passwd ##不输出模式空间内的内容只输出被处理的内容
cat -b passwd | sed -n 3,5p ##三到五行
cat -b passwd | sed -n '3p;5p' ##三和五行
sed -n '/^root/p' passwd ##root开头的行
sed -n '/bash$/p' passwd ##bash结尾的行
sed -n '5,$p' passwd ##第五行到最后一行
sed -n '$p' passwd ##最后一行
d ##删除
sed 5d passwd ##删除第五行
sed '/^#d' passwd ##把#开头的行删除
sed '/^UUID/!d' passwd ##除了UUID开头的行都删除
a ##添加,在下面
sed '$aleeleelee' westos ##在最下面一行添加leeleelee
sed '$aleeleelee\nwestoswestos' westos ##在最下面添加leelee和westoswestos
sed '/hello/aleeleelee' westos ##在hello下面添加leeleelee
sed '2aleeleelee' westos ##在第二行下面添加leeleelee
c ##替换
sed '1chahaha' westos ##将第一行内容变为haha
sed '/linux/chaha' westos ##将linux变为哈哈
w #将符合条件的行写入指定的文件中
sed '/nologin$/wwestosfile' passwd ##将符合条件的行写入到westosfile文件中
i
sed '/westos/iwestoslinux' westos ##将westoslinux插入到内容westos之上
r 整合文件
sed '2r lee' westos ##将lee文件中内容插入到westos文件中的第二行之下
sed '/hello/rlee' westos ##将lee文件中的内容插入整合到westos中/hello行下
sed 字符替换
sed 's/a/b/g' test ##把test文件中的所有列a替换成b
sed 's/a/b/' test ##没加g表示默认将第一列的a替换成b
sed 's/sbin/westos/g' passwd ##把全文的sbin替换成westos
sed '4,5s/sbin/westos/g' passwd ##把4-5行的sbin替换成westos
sed '$s/sbin/westos/g' passwd ##把最后一行的sbin替换成westos
sed '/lp/,/halt/s/sbin/westos/g' passwd ##把lp和halt字符之间的sbin替换成westos
sed 's/\//####/g' passwd ##把全文的/替换成####
sed 's@/@####@g' passwd ##把全文的/替换成####
sed 's@/@####@g' -i passwd ##把替换的内容保存到原文见中
三.awk
awk -F 分割符号 BEGIN{}{}END{} FILENAME
awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' passwd
##BEGIN表示运行处理策略之前做的动作
##"name"字符串不加引号表示变量,加引号表示字符串本身
##{print $1}处理动作
##end处理结束所作的事情
NR行数,NF列数
awk -F : '{print NR}' passwd ##行数
awk -F : '{print NF}' passwd ##列数
awk -F : '{print FILENAME}' passwd ##FILENAME 要处理的文件名称
awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' passwd
##westos=1 设定westos=1
##westos++ 每处理一行westos自动加1
##print westos 处理所有行之后打印westos的值
awk -F : '/nologin$/{print $1,$7}' passwd ##显示所有以nonogin结尾的行中的第一列和第七列
awk -F : '/nologin$|^root/{print $1,$7}' passwd ##条件中两个元素或关系,nologin结尾或root开头的行中的第一列和第七列
awk -F : '/nologin$/||/^root/{print $1,$7}' passwd ##两个条件或关系
awk -F : '/bash$/&&/^root/{print $1,$7}' passwd ##两个条件并且关系awk -F : '/bash$/&&/^root/{print $0}' passwd ##以bash结尾并且以root开头所有的列
awk -F : '/bash$/&&/^root/{print $1}' passwd ##以bash结尾并且以root开头的第一列
awk -F : '/bash$/&&/^root/{print $2}' passwd ##以bash结尾并且以root开头的第二列awk -F : '$7~/bash$/{print $0}' passwd ##第七列是以bash结尾的所有列
awk -F : '$7!~/bash$/{print $0}' passwd ##第七列不是以bash结尾的所有列
测试 :
1. 统计在系统中能su切换的并且用户家目录不再home下的用户数量
2.awk一条命令抓取ens3网卡的ip
3.练习脚本,Apache_port.sh,此脚本接入数字,http的端口就改为此数字,假设selinux状态关闭,例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!
sh Apache_port.sh 8080
apache的端口会被修改为8080