- grep
- sed
- awk
1.grep
1.grep 常规
egrep = grep -E
2.grep格式
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 -数字 显示过滤行以及上面几行和下面几行
grep -n 显示匹配的行所在行号
grep -A 显示过滤行以及下面几行
grep -B 显示过滤行以及上面几行
grep -v 反向过滤
3.grep字符数量匹配规则:
^westos 以westos开有
westos$ 以westos结尾
w....s w开头s结尾中间4个任意字符
.....s s结尾前面5个任意字符
* 字符出现0到任意次
? 0到1次
+ 1到任意次
{n} n次
{m,n} m到n次
{0,n} 0-n次
{,n} 0-n次
{m,} 最少m次
(lee){2} lee字符串出现2次
2.sed
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
p:
p 显示
sed -n 5p westos 显示第五行
sed -n 3,5p westos 显示3到5行
sed -ne "3p;5p westos 显示3和5行
sed -ne 1,5p westos 1-5行
sed -ne '5,$p' westos 5到最后一行
sed -n '/^#/p' fstab 显示以#开头的行
d:
d 删除
sed 5d westos 删除第五行
sed '/^#/d' fstab 把#开头的行删除
sed '/^UUID/!d' fstab 除了UUID以外的行都删除
sed -e '5,$d' westos 删除第五行到最后一行
a:
a 添加
sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab
c:
c 替换
sed -e '/^#/c hello world' fstab 将以#开头的行替换为hello world
sed '5chello world' westos 将第五行替换为hello world
w:
w 把符合的行写到指定文件中
sed '/^UUID/w westofile' westos 把westos中UUID开头的行写入westosfile中
i:
扫描二维码关注公众号,回复:
11439542 查看本文章
i 插入
sed '5ihello westos' westos
r:
r 整合文件
sed '5r haha' westos
sed字符替换:
sed 's/:/###/g' westos
sed 's/:/###/' westos
sed 's/:/###/g' westos
sed '1,5s/:/###/g' westos
sed '1s/:/###/g' westos
sed '1s/:/###/g;5s/:/###/g' westos
sed '/lp/,/shutdown/s/:/###/g' westos
sed 's/\//####/g' westos
sed 's@/@####@g' westos
sed 's@/@####@g' -i westos 把sed处理的内容保存到westos文件中
3.awk
awk -F 分隔符 BEGIN{}{}END{} FileName
NR 行数
NF 列数
FILENAME 文件名称本身
westos 变量值
“westos” westos字符串
/bash$/ 条件
/条件1|条件2/ 条件1或者条件2(一个条件)
/条件1/||/条件2/ 条件1或者条件2(两个条件)
/条件1/&&/条件2/ 条件1并且条件2
$0 所有的列
$1 第一列
$2 第二列
$3 第三列
/etc/passwd文件的第六列没有home关键字并且以bash结尾的行:
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd
练习:
统计在系统中能su切换的并且家目录不在/home下的用户数量