一、grep(模糊匹配)
1、grep的格式
grep 匹配条件 处理条件
grep root passwd 将所有还有”root“字符串的行显示出来
grep ^root passwd 将所有还有”root“字符串开头的行显示出来
grep root$ passwd 将所有还有”root“字符串结尾的行显示出来
grep -i root passwd 忽略大小写
grep -E "root|ROOT" passwd 将满足两个条件的结国都显示出来
2、grep中的正则表达式
^root 以root开头
root$ 以root结尾
'r...t' 其中三位不定
'...t' t前边的3位
实例:
egrep "root|bash" passwd 将含有“root” 或“bash”,或两者的行摘选
grep -E "root|bash" passwd 将含有“root” 或“bash”,或两者的行摘选
grep -E "^root|bash$" passwd把以root开头开头或以bash结尾或两者都有的行摘选
grep -E ^root passwd | grep bash$ 以root开头,并且以bash结尾
grep -i root passwd -v 除了含有root之外行显示出来
cat -b passwd | grep games -2 显示满足条件的行和上下两行
cat -b passwd | grep games -A2 显示满足条件的行和下边两行
cat -b passwd | grep games -B2 显示满足条件的行和上两行
3、grep中字符的匹配次数设定
* 字符出现【0-任意次】
\? 字符出现【0-1次】
\+ 字符出现【1-任意次】
\{n\} 字符出现【n次】
\{m,n\} 字符出现【最少m次,最多n次】
\{0,n\} 字符出现【0-n次】
\{m,\} 字符出现【最少m次】
\(xy\)\{n\} xy关键字出现n次
.* 关键字之间 匹配任意字符
实例:
grep x*y test x出现0到任意多次
grep -E 'x?y' test x出现0到1次
gre -E 'x+y' test x出现1到任意多次
grep -E 'x{2}y' test x出现两次
grep -E 'x{2,3}y' test x出现两次或三次
grep -E 'x{2,}y' test x出现2到任意多次
grep -E 'x{,2}y' test x出现0到2次
grep -E '(xy){2,}' test xy出现任意多次
grep -E 'x.*y' xy中间任意匹配
4、grep中字符匹配位置设定
^关键字
关键字$
\<关键字
关键字\>
\<关键字\>
实例:
grep -E '\<root' passwd 左边是'root'字符串
rootsh
grep -E 'root\>' passwd 右边是 ’root‘字符串
chroot
grep -E '/root/>' passwd 仅含有’root‘字符串
二、sed
1、sed 对字符的处理
sed -p 显示
-d 删除
-a 添加
-c 替换
-w 写入
-i 插入
1)、p模式的操作
cat passwd -n | sed 5p 查看第5行及其其他行
cat passwd -n | sed -n 5p 仅仅查看第5行
cat passwd -n | sed -n 3,5p 查看第3到5行
cat passwd -n | sed -n '3p;5p' 查看第3到5行
sed -n '/#/p' passwd 显示带#号的行
sed -n '/#/!p' passwd 显示不带#号的行
sed -n '/^$/!p' passwd 显示除了空行之外的其他行
2)、d的操作
sed '/^UUID/d' /etc/fstab 删除UUID开头的行
sed '/^#/d' /etc/fstab 删除#开头的行
sed '/^$/d' /etc/fstab 删除空行
sed '1,4d' /etc/fstab 删除第1行和第四行
sed '1d;4d' /etc/fstab 删除第1行到第四行
sed –n '/^UUID/!d' /etc/fstab 删除除了以UUID开头的行
3)、a模式的操作
sed '/^UUID/a \hello\nwestos' passwd 在一UUID开头的行的下一行插入hello,westos
sed '4ahello\nwestos' passwd 在第四行插入hello,westos
4)、c,i模式
sed '/#/cwestos' passwd 把所有#开头的行替换成westos
sed '/#/cwestos' -i passwd 把所有#开头的行替换成westos,并保存到原文件
5)、w模式
-n 表示在屏幕上只输出符合条件的内容,其他内容忽略掉
sed -n '/^UUID/w file' passwd 把UUID开头的行导入到file文件中
sed -n '/^UUID/= ' passwd 显示UUID开头的行数
sed -n '$=' passwd 统计文件总的行数
sed '$r file' passwd 办file里边的内容插到passwd的第三行后边
6)、其他用法
sed -n -e '/^UUID/p' -e '/^UUID/=' passwd 显示UUID开头的行,并且显示行号
sed -n -f rule passwd rule里边是规则
/^UUID/p
/^UUID/=
sed 's/sbin/westos/g' passwd 将passwd中的sbin替换成westos
sed '1,5s/sbin/westos/g' passwd 将passwd中1到5行中的sbin替换成westos
sed '/lp/,/halt/s/sbin/westos/g' passwd 将passwd中从以lp开头到
以halt开头的行中的sbin替换成westos
sed 's/\///g' passwd 把passwd中的‘/’替换为空
sed -e 's@sbin@westos@g' -e 's/nologin/lee/g'
@和/等价,都能使用
sed '=' /etc/fstab | sed 'N;s/\n//g'
删除空行,使行号在每行的开始输出
三、awk
awk -F : '{print $1}' passwd 以:为分隔符,打印第一列
awk -F : 'BEGIB{print "hello"}{print $2} ' passwd
以:为分隔符,开始打印hello,然后打印第二列
awk -F : 'BEGIN{n=1}{print $1,n}' passwd
在第二列的每一行后边打印1
awk -F : 'BEGIN{n=1}{print $1,n++}' passwd
输出第一列和在后边每一行的行号
awk -F : 'BEGIN{n=1}{print n++,$1}'
输出第一列并在每一行的前边输出本行的行号
awk -F 'BEGIN{n=1}{print $1,n++}END{print "over"}'
在末尾输出over
awk -F 'BEGIN{n=1}{print $1,n++}END{print NR/NF}'
在末尾打印总行数/列数
awk '/bash/{print }' passwd 打印bash行
awk -F : '/bash/{print $1}' passwd 打印bash行第一列
awk -F : 'NR==3{print $1}' passwd 打印第三行第一列
awk -F : 'NR==3{print}' passwd 打印第三行
awk -F : 'NR>=4&&NR<=6{print}' passwd
打印第4到6行
awk -F : 'NR==4||NR==6{print}' passwd
打印第4行,6行
awk '{print FILENAME}' passwd 打印文件名
awk 'BEGIN{N=0}/nologin$/{N++}END{print N}' passwd
统计nologin结尾的行数
awk '/^[a-d]/{print}' passwd 打印以a到d开头的行
awk '/^[^a-d]/{print}' passwd 打印除了a-d开头的行
awk '/^r/bash$/{print}' passwd 打印r开头,或者以bash结尾
awk '/^r/&&/bash$/{print}' passwd 打印以r开头以bash结尾的行
awk -F : '$6~/bin$/{print}' passwd 打印第6列以bin结尾的行
awk -F : '$6-/\<bin$/{print}' passwd打印第6列仅是bin的行
awk -F : '$6!-/bin$/{print}' passwd 打印第6列不是bin结尾的行
awk -F : 'BEGIN{N=0}$6!~/^\/home/&&$7~/bash$/print{$1,N++}END{print N}' passwd