博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式、grep、sed和awk
阅读量:7006 次
发布时间:2019-06-27

本文共 11384 字,大约阅读时间需要 37 分钟。

hot3.png

什么是正则

正则就是一串有规律的字符串掌握好正则对于编写shell脚本有很大帮助各种编程语言中都有正则,原理是一样的本章将要学习grep/egrep、sed、awk

grep

grep [-cinvABC] 'word' filename   //word可以用正则表达式 -c 行数 -i 不区分大小写 -n 显示行号 -v 取反 -r 遍历所有子目录 -A 后面跟数字,过滤出符合要求的行以及下面n行 -B 同上,过滤出符合要求的行以及上面n行 -C 同上,同时过滤出符合要求的行以及上下各n行

常见的正则表达式:

. 表示任意一个字符* 表示*前面那个字符有零个或者多个{} 表示一个范围+ 表示匹配一个或多个+前面的字符? 表示?前面的字符有零个或者1个| 表示或者

案例测试:

[root@wangzb01 shelltest]# cp /etc/passwd ./test  //拷贝passwd文件到当前文件夹[root@wangzb01 shelltest]# grep -n 'root' test  //结果显示行号[root@wangzb01 shelltest]# grep -nv 'nologin' test   //结果取反并显示行号[root@wangzb01 shelltest]# grep -A2 'root' test   //将查询结果所在行,以及改行后面2行打印出来[root@wangzb01 shelltest]# cp /etc/inittab ./test2[root@wangzb01 shelltest]# grep '[0-9]' test2  //取有数字的行[root@wangzb01 shelltest]# grep -v '[0-9]' test2 //取没有数字的行[root@wangzb01 shelltest]# grep -v '^#' test2  取不以#开头的行,#号开头的行取反[root@wangzb01 shelltest]# grep -v '^#' test2 | grep -v  '^$'  //取不以#开头的行后,再取没有空格的行[root@wangzb01 shelltest]# grep '^[^a-zA-Z]' test.txt  //取以字母开头的行[root@wangzb01 shelltest]# grep 'r.o' test  //r和o中间匹配任意一个字符的行[root@wangzb01 shelltest]# grep 'oo*' test  //*表示任意多个任意字符[root@wangzb01 shelltest]# grep '.*' test[root@wangzb01 shelltest]# grep 'o\{2\}' test   //连续两个o的行[root@wangzb01 shelltest]# egrep 'o{2}' test  //连续两个o的行[root@wangzb01 shelltest]# egrep 'o+' test   //+,匹配带有一个或多个+前面的字符的行[root@wangzb01 shelltest]# egrep 'oo?' test[root@wangzb01 shelltest]# egrep 'root|nologin' test[root@wangzb01 shelltest]# egrep '(oo){2}' test

sed

sed -n '5'p test 	[root@wangzb01 sed]# sed -n '5'p test	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sed -n '1,5'p test 	[root@wangzb01 sed]# sed -n '1,5'p test	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:/sbin/nologin	daemon:x:2:2:daemon:/sbin:/sbin/nologin	adm:x:3:4:adm:/var/adm:/sbin/nologin	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sed -n '1,$'p test 	[root@wangzb01 sed]# sed -n '25,$'p test	ftpuser:x:1003:1003::/home/ftpuser:/bin/bash	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin	tcpdump:x:72:72::/:/sbin/nologin	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin	zabbix:x:995:992:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin sed -n '/root/'p test 	[root@wangzb01 sed]# sed -n '/root/'p test	root:x:0:0:root:/root:/bin/bash	operator:x:11:0:operator:/root:/sbin/nologin sed -n '/^1/'p test 	[root@wangzb01 sed]# sed -n '/^1/'p test	12ab sed -n 'in$'p test sed -n '/r..o/'p test 	[root@wangzb01 sed]# sed -n '/r..o/'p test	operator:x:11:0:operator:/root:/sbin/nologin	polkitd:x:999:998:User for polkitd:/:/sbin/nologin	unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin sed -n '/oo*/'p test 	[root@wangzb01 sed]# sed -n '/oo*/'p test	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:/sbin/nologin	daemon:x:2:2:daemon:/sbin:/sbin/nologin	adm:x:3:4:adm:/var/adm:/sbin/nologin	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin	operator:x:11:0:operator:/root:/sbin/nologin	games:x:12:100:games:/usr/games:/sbin/nologin	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin	nobody:x:99:99:Nobody:/:/sbin/nologin	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin	dbus:x:81:81:System message bus:/:/sbin/nologin	polkitd:x:999:998:User for polkitd:/:/sbin/nologin	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin	postfix:x:89:89::/var/spool/postfix:/sbin/nologin	chrony:x:998:996::/var/lib/chrony:/sbin/nologin	user1:x:1000:1000::/home/user1:/bin/bash	mysql:x:1001:1001::/home/mysql:/bin/nologin	unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin	php-fpm:x:1002:1002::/home/php-fpm:/bin/bash	nginx:x:996:994:nginx user:/var/cache/nginx:/sbin/nologin	ftpuser:x:1003:1003::/home/ftpuser:/bin/bash	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin	tcpdump:x:72:72::/:/sbin/nologin	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin	zabbix:x:995:992:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin sed -e '1'p -e '/r..o/'p -n test 	[root@wangzb01 sed]# sed -e '1'p -e '/r..o/'p -n test	root:x:0:0:root:/root:/bin/bash	operator:x:11:0:operator:/root:/sbin/nologin	polkitd:x:999:998:User for polkitd:/:/sbin/nologin	unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin sed '1'd test    //删除第一行,打印出后面行内容 sed '1,3'd test    //删除1,3行,打印出后面的内容 sed '/oot/'d test       sed '1,2s/ot/to/g' test  	[root@wangzb01 sed]# sed '1,2s/ot/to/g' test | sed -n '1,2'p	roto:x:0:0:roto:/roto:/bin/bash	bin:x:1:1:bin:/bin:/sbin/nologin sed 's#ot#to#g' test 	[root@wangzb01 sed]# sed '1,5s@/sbin@wangzb@g' test | sed -n '1,5'p	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:wangzb/nologin	daemon:x:2:2:daemon:wangzb:wangzb/nologin	adm:x:3:4:adm:/var/adm:wangzb/nologin	lp:x:4:7:lp:/var/spool/lpd:wangzb/nologin	[root@wangzb01 sed]# sed '1,5s#/sbin#wangzb#g' test |sed -n '1,5'p	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:wangzb/nologin	daemon:x:2:2:daemon:wangzb:wangzb/nologin	adm:x:3:4:adm:/var/adm:wangzb/nologin	lp:x:4:7:lp:/var/spool/lpd:wangzb/nologin sed 's/[0-9]//g' test 	[root@wangzb01 sed]# sed 's/[0-9]//g' test | sed -n '1,5'p	root:x:::root:/root:/bin/bash	bin:x:::bin:/bin:/sbin/nologin	daemon:x:::daemon:/sbin:/sbin/nologin	adm:x:::adm:/var/adm:/sbin/nologin	lp:x:::lp:/var/spool/lpd:/sbin/nologin sed 's/[a-zA-Z]//g' test 	[root@wangzb01 sed]# sed '1,5s/[a-zA-Z]//g' test | sed -n '1,5'p	::0:0::/://	::1:1::/://	::2:2::/://	::3:4:://://	::4:7::///:// sed -r 's/(rot)(.*)(bash)/\3\2\1/' test 	[root@wangzb01 sed]# sed -n '1,5'p test	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:/sbin/nologin	daemon:x:2:2:daemon:/sbin:/sbin/nologin	adm:x:3:4:adm:/var/adm:/sbin/nologin	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin	[root@wangzb01 sed]# sed -r '1,5s/(^[^:]+)(:.*:)([^:]+)$/\3\2\1/' test | sed -n '1,5'p	/bin/bash:x:0:0:root:/root:root	/sbin/nologin:x:1:1:bin:/bin:bin	/sbin/nologin:x:2:2:daemon:/sbin:daemon	/sbin/nologin:x:3:4:adm:/var/adm:adm	/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp sed 's/^.*$/123&/' test   //在所有行前面加上123 	[root@wangzb01 sed]# sed -n '1,5s/^.*$/123&/'p test 	123root:x:0:0:root:/root:/bin/bash	123bin:x:1:1:bin:/bin:/sbin/nologin	123daemon:x:2:2:daemon:/sbin:/sbin/nologin	123adm:x:3:4:adm:/var/adm:/sbin/nologin	123lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin	[root@wangzb01 sed]# sed -n '1,5s/^.*$/&123/'p test	root:x:0:0:root:/root:/bin/bash123	bin:x:1:1:bin:/bin:/sbin/nologin123	daemon:x:2:2:daemon:/sbin:/sbin/nologin123	adm:x:3:4:adm:/var/adm:/sbin/nologin123	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin123 sed -i 's/ot/to/g' test   //直接更改文件中的内容

awk

[root@wangzb01 awk]# mkdir awk [root@wangzb01 awk]# cd awk/ 	[root@wangzb01 awk]# pwd	/root/awk [root@wangzb01 awk]# cp /etc/passwd ./test head -n2 test.txt|awk -F ':' '{print $1}'	[root@wangzb01 awk]# head -5 test | awk -F ':' '{print$1}'	root	bin	daemon	adm	lp head -n2 test.txt|awk -F ':' '{print $0}'  //$0可以打印一整行	[root@wangzb01 awk]# head -5 test | awk -F ':' '{print$0}'	root:x:0:0:root:/root:/bin/bash	bin:x:1:1:bin:/bin:/sbin/nologin	daemon:x:2:2:daemon:/sbin:/sbin/nologin	adm:x:3:4:adm:/var/adm:/sbin/nologin	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin awk -F ':' '{print $1"#"$2"#"$3"#"$4}'	[root@wangzb01 awk]# head -5 test | awk -F ':' '{print $1"#"$2"#"$3"#"$4}'	root#x#0#0	bin#x#1#1	daemon#x#2#2	adm#x#3#4	lp#x#4#7 awk '/oo/' test 	[root@wangzb01 awk]# head -5 test | awk '/oo/'	root:x:0:0:root:/root:/bin/bash	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin awk -F ':' '$1 ~/oo/' test	[root@wangzb01 awk]# head -5 test | awk -F ':' '$1 ~/oo/'	root:x:0:0:root:/root:/bin/bash awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test	[root@wangzb01 awk]# head -5 test |  awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test	root 0	operator 11 awk -F ':' '$3=="0"' /etc/passwd 	[root@wangzb01 awk]# awk -F ':' '$3=="0"' test	root:x:0:0:root:/root:/bin/bash awk -F ':' '$3>="500"' /etc/passwd [root@wangzb01 awk]# head -5 test | awk -F ':' '$3=="0"' /etc/passwd	root:x:0:0:root:/root:/bin/bash awk -F ':' '$3>=500' /etc/passwd 	[root@wangzb01 awk]#  awk -F ':' '$3>=500' test	polkitd:x:999:998:User for polkitd:/:/sbin/nologin	chrony:x:998:996::/var/lib/chrony:/sbin/nologin	user1:x:1000:1000::/home/user1:/bin/bash	mysql:x:1001:1001::/home/mysql:/bin/nologin	unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin	php-fpm:x:1002:1002::/home/php-fpm:/bin/bash	nginx:x:996:994:nginx user:/var/cache/nginx:/sbin/nologin	ftpuser:x:1003:1003::/home/ftpuser:/bin/bash	zabbix:x:995:992:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin awk -F ':' '$7!="/sbin/nologin"' test	 [root@wangzb01 awk]# awk -F ':' '$7!="/sbin/nologin"' test	root:x:0:0:root:/root:/bin/bash	sync:x:5:0:sync:/sbin:/bin/sync	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown	halt:x:7:0:halt:/sbin:/sbin/halt	user1:x:1000:1000::/home/user1:/bin/bash	mysql:x:1001:1001::/home/mysql:/bin/nologin	php-fpm:x:1002:1002::/home/php-fpm:/bin/bash	ftpuser:x:1003:1003::/home/ftpuser:/bin/bash awk -F ':' '$3<$4' test 	[root@wangzb01 awk]# awk -F ':' '$3<$4' test	adm:x:3:4:adm:/var/adm:/sbin/nologin	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin	games:x:12:100:games:/usr/games:/sbin/nologin	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin awk -F ':' '$3>"5" && $3<"7"' test 	[root@wangzb01 awk]# awk -F ':' '$3>"5" && $3<"7"' test	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin awk -F ':' '$3>1000 || $7=="/bin/bash"' test 	[root@wangzb01 awk]# awk -F ':' '$3>1000 || $7=="/bin/bash"' test	root:x:0:0:root:/root:/bin/bash	user1:x:1000:1000::/home/user1:/bin/bash	mysql:x:1001:1001::/home/mysql:/bin/nologin	php-fpm:x:1002:1002::/home/php-fpm:/bin/bash	ftpuser:x:1003:1003::/home/ftpuser:/bin/bash head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}' 	[root@wangzb01 awk]# head -5 test |awk -F ':' '{OFS="#"} {print $1,$3,$4}'	root#0#0	bin#1#1	daemon#2#2	adm#3#4	lp#4#7 awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' test	[root@wangzb01 awk]# awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' test	mysql#x#1001#1001	php-fpm#x#1002#1002	ftpuser#x#1003#1003 head -n3 /etc/passwd | awk -F ':' '{print NF}' 	[root@wangzb01 awk]# head -n3 test | awk -F ':' '{print NF}'	7	7 head -n3 test | awk -F ':' '{print NR}' [root@wangzb01 awk]# head -n3 test | awk -F ':' '{print NR}'	1	2	3 awk 'NR>40' test 	[root@wangzb01 awk]# awk 'NR>26' test	tcpdump:x:72:72::/:/sbin/nologin	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin	zabbix:x:995:992:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin awk -F ':' 'NR<20 && $1 ~ /roo/' test 	[root@wangzb01 awk]# awk -F ':' 'NR<20 && $1 ~ /roo/' test	root:x:0:0:root:/root:/bin/bash head -n 3 test |awk -F ':' '$1="root"' 	[root@wangzb01 awk]# head -n 3 test |awk -F ':' '$1="root"'	root x 0 0 root /root /bin/bash	root x 1 1 bin /bin /sbin/nologin	root x 2 2 daemon /sbin /sbin/nologin awk -F ':' '{(tot=tot+$3)}; END {print tot}' test 	[root@wangzb01 awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test	9778	[root@wangzb01 awk]# awk -F ':' '{(tot=$3+$4)}; END {print tot}' test 	1987 awk -F ':' '{if ($1=="root") {print $0}}' test 	[root@wangzb01 awk]# awk -F ':' '{if ($1=="root") {print $0}}' test	root:x:0:0:root:/root:/bin/bash

转载于:https://my.oschina.net/u/3954059/blog/3021673

你可能感兴趣的文章
iOS 自定义日历(日期选择)控件
查看>>
postMessage 简介
查看>>
双向通信之Comet
查看>>
http请求参数之Query String Parameters、Form Data、Request Payload
查看>>
论道经营分析体系的建设 - 《用数据决策》读后感
查看>>
手把手教你在Flutter项目优雅的使用ORM数据库--下篇
查看>>
前端时光机(神技)
查看>>
阿里巴巴普惠体前端应用
查看>>
每周分享第 8 期(20181228)
查看>>
微商怎么引流精准客源微商怎么加好友快速成交
查看>>
计算机网络之网络配置基础
查看>>
GuavaCache入门
查看>>
小猿圈Web前端开发学习路线及建议
查看>>
[译]React函数组件和类组件的差异
查看>>
java版b2b2c社交电商spring cloud分布式微服务(二)服务消费者(rest+ribbon)
查看>>
说说如何利用 Webpack 来搭建 Vue 单文件组件环境
查看>>
前端面试题:斐波那契数列
查看>>
是哪一瞬间让前端们决定入职的?
查看>>
CountDownLatch和CyclicBarrier模拟同时并发请求
查看>>
下沉市场中的新零售,如何抓住“小镇青年”的心
查看>>