grep
- grep 格式
- grep 匹配条件 处理文件
- grep -E = egrep ##E是扩展的意思可以相当于或
- grep -E 'halt|lp' file ##查找halt或者lp存在的行
- grep root passwd #过滤root关键字
- grep ^root passwd ##以root开头
- grep root$ passwd ##以root结尾
- grep -i root passwd ##忽略大小写
- grep -E "\<root" passwd ##root字符之前不能有字符
- grep -E "root\>" passwd ##root字符之后不能有字符
- grep -数字 passwd /etc/passwd ##显示过滤行以及上面几行和下面几行
- grep -n2 passwd /etc/passwd ##和上面一个意思
- grep -n passwd /etc/passwd ##显示匹配的行所在行号
- grep -A passwd /etc/passwd ##显示过滤行以及下面几行
- grep -B passwd /etc/passwd ##显示过滤行以及上面几行
- grep -v passwd /etc/passwd ##反向过滤
-
-
- grep字符数量匹配规则
- ^westos ##以westos开有
- westos$ ##以westos结尾
- w....s ##w开头s结尾中间4个任意字符
- .....s ##s结尾前面5个任意字符
- * ##字符出现0-任意
- ? ##0到1次
- + ##1次到任意次
- grep -E "we+s" 文件名
- {n} ##n次
- {m,n} ##m到n次
- {0,n} ##0-n次
- {,n} ##0-n次
- {m,} ##最少m次
- (lee){2} ##lee字符串出现2次
- 练习脚本:
- 请显示系统中能被su命令切换的用户名称
- grep -E "bash$|sh$" /etc/passwd | cut -d : -f 1
sed
- 命令格式:
- sed 参数 命令 处理对象
- sed 参数 处理对象 -f 处理规则文件(自己写,里面是命令)
-
- 对字符的处理
- p ##显示
- sed -n 5p westos ##显示第五行,n表示静默输出,不显示模式空间内容##没有-n 会显示两遍,因为有模式空间
- sed -n 3,5p westos ##显示3到5行
- sed -ne "3p;5p" westos ##显示3和5行,几个e几个策略,加双引号可以简略用一个e
- sed -n 1,5p westos ##1-5行
- sed -n '5,$p' westos ##5到最后一行
- sed -n '/^#/p' fstab ##显示以#开头的行
- d ##删除
- sed 5d westos ##删除第五行
- sed '/^#/d' fstab ##把#开头的行删除
- sed '/^UUID/!d' fstab ##除了UUID以外的行都删除
- sed -e '5,$d' westos ##删除5到最后一行(不加e也可以)
- a ##添加
- sed -e '$a hello world' fstab ##最后一行添加,$表示最后一行,e表示多条命令(此处不加e也可)
- sed -e '/^#/a hello world' fstab ##以#开头的行后加hello world
- sed '/nologin/a hello world' file ##nologin的行后面加hello world
- c ##替换
- sed -e '/^#/c hello world' fstab ##以#开头的替换成hello world
- sed '5c hello world' westos ##第五行替换成hello world
- w ##把符合的行写到指定文件中
- sed '/^UUID/w westofile' westos ##把westos中UUID开头的行写入westosfile中
- sed '/nologin/w file1' file ##把file中不能登陆的行写入file1
- i ##插入
- sed '5ihello westos' westos ##第5行插入hello westos^
- sed '/nologin/i heoo' file ##nologin 所在行写入heoo
-
- r ##整合文件
- vim haha
- sed '5r haha' westos ##把haha文件内容放到westos文件的第5行之后,此处haha是一个文件
- sed 字符替换
- sed 's/:/###/g' westos ##将westos文件中:替换成###
- sed '1,5s/:/###/g' westos ##1到5行的:替换成###
- sed '1s/:/###/g;5s/:/###/g' westos ##1到5行的:替换成###
- sed '/lp/,/shutdown/s/:/###/g' westos ##lp和shutdown之间的:替换成###
- sed 's/\//####/g' westos
- sed 's@/@####@g' westos ##@和/是一个意思,都表示分割符
- sed -e 's/:/###/g' -e 's@/@####@g' westos ##-e处理多条语句
- sed 's@/@####@g' -i westos ##把sed处理的内容保存到westos文件中(修改的是westos文件内容,修改后覆盖原来内容)
- 练习及脚本
- Apache_port.sh
- 此脚本后加入数字
- http的端口就改为此数字
- 假设selinux为关闭状态
p显示
d删除
a 增加
- sed -e ‘$a hello\nworld’ fstab
插入
c 替换
w 写入文件
插入
i 插入
r 整合文件
替换(沿用vim里面替换的手法)
脚本练习:修改Apache端口
awk 报告生成器
- 格式
- awk -F 分隔符 ‘BEGIN{}{}END{}‘ FILENAME
- NR #行数
- NF #列数
- FILENAME #文件名称本身
- westos #westos变量值
- “westos” #westos字符串
- /bash$/ #条件(以bash 结尾)
- /条件1|条件2/ #条件1或者条件2
- /条件1/||/条件2/ #条件1或者条件2
- /条件1/&&/条件2/ #条件1并且条件2
- $0 #所有的列
- $1 #第一列
- $2 #第二列
- $3 #第三列
- $1,3 #第一列和数字3
- $1"###"$3 #第一列和第三列以###分隔开
- awk -F : 'BEGIN{westos=1}{print westos}' file ##先设定westos变量指,然后显示westos变量
- awk -F : 'BEGIN{westos=1}{print westos}END{print "end"}' file ##以end结束,要用双引号
- awk -F : '/bash$/{print $1}' file ##输出以bash结尾的第一列
- awk -F : '/bash$/||/^root/{print $1}' file ##输出以bash结尾或者以root开头的第一列
- awk -F : '/bash$/&&/root/{print $1}' file ##以bash结尾,且包含root的第一列
- awk -F : '!/bash$/&&/root/{print $1}' file ##不以bash结尾,且包含root的第一列。!需要放在//前
- awk -F : '/bash$|root/{print $1}' file ##以bash结尾或者包含root的第一行
- #/etc/passwd文件的第六列没有home关键字并且以bash结尾的行
- awk -F : '$6!~/home/&&/bash$/{print $1}' /etc/passwd
- 课后练习:
- 统计在系统中能su切换的并且用户家目录不在/home下的用户数量
- awk -F : 'BEGIN{n=0}$6!~/home/&&/bash$/{n++}END{print n}' /etc/passwd
脚本练习