1.grep
grep
grep -E = egrep
grep 匹配条件 处理文件
- grep str file#过滤str关键字
- grep ^str file##以str开头
- grep str$ file##以str结尾
- grep -i str file##忽略大小写
- grep -E "\<str" file##str字符之前不能有字符
- grep -E "str\>" file##str字符之后不能有字符
- grep -数字 ##显示过滤行以及上面x行和下面x行
- grep -n ##显示匹配的行所在行号
- grep -A ##显示过滤行以及下面几行
- grep -B ##显示过滤行以及上面几行
- grep -v ##反向过滤
grep字符数量匹配规则
- ^str ##以str开头
- str$ ##以str结尾
- a....b ##a开头b结尾中间4个任意字符
- .....s ##s结尾前面5个任意字符
- * ##字符出现0到任意次
- ? ##0到1次
- + ##1到任意此
- {n} ##n此
- {m,n} ##m到n次
- {0,n} ##0-n次
- {,n} ##0-n次
- {m,} ##最少m次
- (hi){2} ##hi字符串出现2次
练习:请显示系统中能被su命令切换的用户名称
vim usershow.sh
2. sed 命令
命令格式:
- sed 参数 命令 处理对象
- sed 参数 处理对象 -f 处理规则文件
对字符的处理 :
p ##显示
- sed -n 5p file ##显示第五行
- sed -n 3,5p file ##显示3到5行
- sed -ne "3p;5p file ##显示3和5行
- sed -ne 1,5p file ##1-5行
- sed -ne '5,$p' file ##5到最后以行
- sed -n '/^#/p' file##显示以#开头的行
d ##删除
- sed 5d file##删除第五行
- sed '/^#/d' file##把#开头的行删除
- sed '/^#/!d' file###删除#开头以外的行
a ##添加
- sed -e '$a hello world' file
- sed -e '$a hello\nworld' file
- sed -e '/^#/a hello world' file
c ##替换
- sed -e '/^#/c hello world' file
- sed '5chello world' file
w ##把符合的行写到指定文件中
- sed '/^#/w myfile' file ##把file中#开头的行写入myfile中
i ##插入
- sed '5ihello' file
r ##整合文件
- sed '5r haha' file
sed 字符替换(规则类似vim里面的替换)
- sed 's/:/###/g' file
- sed 's/:/###/' file
- sed '1,5s/:/###/g' file
- sed '1s/:/###/g' file
- sed '1s/:/###/g;5s/:/###/g' file
- sed '/lp/,/shutdown/s/:/###/g' file
- sed 's/\//####/g' file
- sed 's@/@####@g' file
- sed 's@/@####@g' -i file ##把sed处理的内容保存到file文件中
练习:编写Apache_port.sh脚本
脚本后 接数字 http的端口就改为此数字
假设selinux为关闭状态
3. awk
awk -F 分隔符 BEGIN{}{}END{} FILENAME
- NR #行数
- NF #列数
- FILENAME #文件名称本身
- str ##str变量值
- “str” ##str字符串
- /bash$/ #条件
- /条件1|条件2/ #条件1或条件2
- /条件1/||/条件2/ #条件1或条件2
- /条件1/&&/条件2/ #条件1且条件2
- $0 #所有的列
- $1 #第一列
- $2 #第二列
- $3 #第三列
练习:统计在系统中能su切换的并且用户家目录不在/home下的用户数量
awk -F : '$6!~/home/&&/bash$|sh$|tcsh$|csh$/{print}' /etc/passwd