shell三剑客

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值