1、grep
默认贪婪模式;只要字符相符就找出来
grep -E = egrep
grep格式:
grep 匹配条件 处理文件
grep root hello #过滤hello中的关键字root
grep ^root hello #以root开头
grep root$ hello #以root结尾
grep -i root hello #忽略大小写
grep -E “root|mail” hello #同时筛选root和mail
grep -E “<root” hello #root字符之前不能有字符
grep -E “root>” hello #root字符之后不能有字符
grep -2 root hello #显示过滤行以及上面的2行和下面的2行
grep -n #显示匹配的行所在行号
grep -A2 root hello #显示过滤行以及下面的2行
grep -B2 root hello #显示过滤行以及上面的2行
grep -v root hello #反向过滤
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 #显示
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 #删除
sed 5d westos #删除第五行
sed ‘/^#/d’ fatab #把#开头的行删掉
sed ‘/^UUID/!d’ fstab #除了UUID以外的行,都删掉
sed -e ‘5,$d’ westos #-e为扩展的意思,删除5到无穷行
a #添加
sed -e ‘$a hello world’ fstab
sed -e ‘$a hello\nworld’ fstab
sed -e ‘/^#/a hello world’ fstab #在#开头的行添加hello world
c #替换
sed -e ‘/^#/c hello world’ fstab #以#开头的行替换为hello world
sed ‘5chello world’ westos #将第五行替换为hello world
w #把符合的行写到指定文件中
sed ‘/^UUID/w westosfile’ westos #把westos中UUID开头的行写入westosfile中
i #插入
sed ‘5ihello westos’ westos #第五行插入hello westos
r #整合文件
sed ‘5r haha’ westos #把haha的内容整合到westos的第五行
sed 字符替换
sed 's/:/###/g' westos #把westos文件中所有的:替换成###
sed 's/:/###/' westos #把westos文件中的所有的行但第一列的:替换为###
sed 's/:/###/g' westos
sed '1,5s/:/###/g' westos
sed '1s/: /###/g' westos
sed '/lp/,/shutdown/s/:/###/g' westos
sed 's/\//###/g' westos
sed 's@/@####@g' westos
sed 's@/@####@g' -i westos
sed -f westos passwd
sed -n 5p westos
sed -ne ‘5p;7p’ westos
sed -ne ‘5,$p’ westos
sed -ne ‘1,5p’ westos
sed -ne ‘/we/p’ westos #以we开头的行
sed ‘5,$d’ westos
sed ‘/wes/d’ westos
sed ‘/^$/d’ fstab
sed ‘/^$/d’ fstab -i fstab
sed ‘1ahello westos’ fstab -i fstab
sed ‘1ahello westos’ fstab
sed ‘/^#/ahello westos’ fstab
sed ‘1ihello westos’ fstab
sed ‘/^#/c""’ fstab
sed ‘/^#/w westos’ fstab
sed ‘2r westos’ fstab #把westos的内容整合到fatab第2行
sed ‘s/sbin/westos/g’ passwd
sed ‘5,7s/sbin/westos/g’ passwd
sed ‘/lp/,/halt/s/sbin/westos/g’ passwd
sed -e ‘s/sbin/westos/g;s/nologin/lee/g’ passwd
sed -e ‘s///####/’ passwd #\为了转译/
sed -e ‘s@/@####@’ passwd #如果不想转译,可用@符号
测试:
显示系统中能被su命令切换的用户名称
noh #在vim中取消高亮
3、awk
awk -F 分隔符 BEGIN{}{}END{} FILENAME
NR #行数
NF #列数
FILENAME #文件名称本身
westos #westos变量值
“westos" #westos字符串
/bash$/ #条件
/条件1|条件2/ #条件1或者条件2
/条件1/||/条件2/ #条件1或者条件2
/条件1/&&/条件2/ #条件1并且条件2
$0 #所有的列
$1 #第一列
$2 #第二列
$3 #第三列
awk -F : ‘$6!~/home/&&/bash$/{print}’ /etc/passwd
#/etc/passwd文件的第六列没有home关键字并且以bash结尾的行
awk -F : ‘{print HELLO}’ passwd
awk -F : ‘{print $1}’ passwd
awk -F : ‘{print $0}’ passwd
awk -F : ‘{print $2}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}{print $1}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}{print $1}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}{print NR}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}{print Nf}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}{print FILENAME}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}/bash$/{print $1,$7}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}/bash$/&&/root/{print $1,$7}END{print “END”}’ passwd
awk -F : ‘BEGIN{print “WESTOS”}/bash$/||/root/{print $1,$7}END{print “END”}’ passwd
awk -F : ‘$7-//bin/bash/{print $0}’ passwd
awk -F : ‘$7!-//bin/bash/{print $0}’ passwd