正则表达式sed, awk

正则表达式

是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

sed

特色功能是替换指定字符,也可以完成grep的功能。

  • 下面语句实现grep的匹配功能:
    在这里插入图片描述
[root@tanyvlinux ~]# sed -n  '/root/'p passwd	#匹配root的正则,-n禁止打印无关内容, p把内容打印出来;
operator:x:11:0:operator:/root:/sbin/nologin
[root@tanyvlinux ~]# sed -n  '1,5'p  passwd		#打印1-5行;
1111111111111111111r
kdkk
ooooo
ooo
oo	oo
[root@tanyvlinux ~]# sed -n '/sh$/'p passwd		#sh结尾的行;
r	ot:x:0:0:t:/t:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
[root@tanyvlinux ~]# sed -n -e '/sh$/'p -e '1,3'p  passwd		#-e指定多个条件,同时生效的行,会打印2次;
1111111111111111111r
kdkk
ooooo
r	ot:x:0:0:t:/t:/bin/bash
[root@tanyvlinux ~]# sed -n -e '/nfs/'Ip  passwd		#I不区分大小写;
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
  • 下面语句可完成编缉功能:
    在这里插入图片描述

sed '1,3’d passed #去除1-3行,后显示内容;
sed ‘1,2s/ot/to/g’ passwd #1-2行中所有ot改成to显示出来;

[root@tanyvlinux ~]# sed -r 's/([^:]*):(.*):([^:]*)/\3:\2:\1/' passwd		#第一段与最后一段的替换,\3 \2\1代表前面的小括号内容,-r可以识别扩展符号例如(), +;
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
[root@tanyvlinux ~]# sed 's/^.*$/111&/g' -i passwd		#&代表查找出来的内容,这里是全部匹配,在行前面加上111, -i把内容写入文件;
111bin:x:1:1:bin:/bin:/sbin/nologin
111daemon:x:2:2:daemon:/sbin:/sbin/nologin

sed 's/([0-9]+)(.*)/\2/' -i my_lish.h			#可以把文件所有行码去除,用空格分开的文字;

awk

  • awk主要是对段做操作;
  • 没有匹配情况下,所有行遍历一次;
  • 不指定情况下,打印全行;
  • 筛选功能跟grep,sed差不多,没有grep取反功能,不能直接修改文档;
  • 默认支持正则+,()等;
  • 语句:

在这里插入图片描述


[root@tanyvlinux ~]# awk -F ':' '{print $1":"$3,$4}' passwd	#-F指定分隔符:,打印出每行的第一第三第四段,打印格式用双引号添加分隔符,以逗号分隔用空格分隔;$0为所有段;
bin:1 1
daemon:2 2
[root@tanyvlinux ~]# awk -F ':' '$6 ~ /home/ {print $1,$3,$4} /mysql/ {print $1,$3,$4}' passwd	#同时判断了两个条件,条件1:第六段$6匹配home, 条件2:整句匹配mysql;
vsftpd 1000 1000
user1 1001 1001
user2 1002 1001
msql 1003 1003
mysql 1004 1004
mysql 1004 1004
user3 1005 1005
mys 1006 1007
php-fpm 1007 1008
fftp 1008 1009
ut1 1011 10
[root@tanyvlinux ~]# awk -F ':' '$3>1010 {print $1,$3,$4}' passwd	#可以使用等于==,大于,小于,不等于!=作判断,数字加上双引号判断为字符以ASCII排序;
nfsnobody 65534 65534
ut1 1011 10
[root@tanyvlinux ~]# awk -F ':' '$3>"1010" {print $1,$3,$4}' passwd
daemon 2 2
adm 3 4
[root@tanyvlinux ~]# awk -F ':' '$7!="/sbin/nologin" {print $1,$3,$4}' passwd
sync 5 0
shutdown 6 0

在这里插入图片描述

[root@tanyvlinux ~]# awk -F ':' '$3==$4 && $3>=1000 {print $1,$3,$4} ' passwd	#字段比较,&&同时满足前后两个条件;
vsftpd 1000 1000
user1 1001 1001
nfsnobody 65534 65534
msql 1003 1003
mysql 1004 1004
user3 1005 1005
[root@tanyvlinux ~]# awk -F ':' '$3!=$4 || $3==0 {print $1,$3,$4} {OFS=":"}' passwd	#||或者,OFS定义输出格式分格符,不用一个个写出来;
root:0:0
adm:3:4
lp:4:7
[root@tanyvlinux ~]# awk -F ':' '{print NR":"NF}' passwd	#打印每一行的行号NR和段数NF;
1:0
2:7
3:7
[root@tanyvlinux ~]# awk -F ':' 'NR>40 || NR==1' passwd		#NF,NR作为条件使用;

pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
saned:x:990:984:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
[root@tanyvlinux ~]# awk -F ':' '{if($1!="root") {print $1,$3,$7}}' passwd	#if作条件判断,是之前判断的完整写法,if需要将print包括在里面;
daemon 2 /sbin/nologin
bin 1 /sbin/nologin
[root@tanyvlinux ~]# awk -F ":" '{(tot=tot+$3)} END {print tot}' passwd		#循环语句,没有END遍历一行就print一次tot;
91285
[root@tanyvlinux ~]# awk -F ":" 'NR>7 {print $(NR/7)":"NR":"$NF}' passwd	#$加数字是第几段;
shutdown:8:/sbin/shutdown			#显示第一段:行号:第七段;$(NR/7)小于7行变成$0,打印整行;
halt:9:/sbin/halt
[root@tanyvlinux ~]# tail -3 passwd |awk -F ":" '$3="root"'					#对第三段赋值;
fftp x root 1009  /home/fftp /bin/bash
zabbix x root 979 Zabbix Monitoring System /var/lib/zabbix /sbin/nologin
ut1 x root 10  /home/ut2 /bin/bash
  • 用选取一段匹配另外一个变量;
cat file.txt | awk '{ if ($7~/'"$i"'/) {print $0} }'| wc -l ; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值