700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Shell编程扩展正则表达式(egrep awk)

Shell编程扩展正则表达式(egrep awk)

时间:2020-09-21 19:44:46

相关推荐

Shell编程扩展正则表达式(egrep awk)

目录

扩展正则表达式扩展正则表达式元字符扩展元字符egrep示例匹配o至少出现一次或者以上次数的内容匹配以be为开头,t为结尾,中间可以是s或者为空的内容匹配以sh为开头,rt为结尾,中间可以是i或者o的内容匹配包含oo出现一次,或者一次以上的内容awk工具介绍格式解析awk工作原理内建变量用法查找出在/etc/passwd所有文件信息的第1个,第7个字段内容查找出在/etc/passwd所有文件信息的第1个,第7个字段内容且以zjq为开头的和以/sbin/nologin结尾的内容内建变量用法示例输出第3行的第1第7个字段输出第3行到第6行的第1第7个字段,输出第3行,第6行的第1第7个字段,输出大于等于第3行小于等于第6行的第1第7个字段输出奇数行,偶数行的行号统计以/bin/bash为结尾的行数输出文件中每行中(以空格或制表符分隔)的第三个字段输出文件中每行中(以空格或制表符分隔)的第一和三个字段输出没有设置密码的用户输出第7字段包含/bash,/bin/bash的用户输出在/etc/services中第一个字段是nfs的且字段数是4个输出第7字段不是/bin/bash也不是/sbin/nologin的内容调用wc -l命令并用来统计1以/bash为结尾的行数即用户数调用w命令统计在线的用户数调用hostname并输出当前的主机名输出path变量中的值,第三个字段的值

扩展正则表达式

扩展正则表达式元字符

扩展正则表达式是对基础正则表达式的扩充深化

扩展元字符

+:匹配前面子表达式1次以上 例如:go+d,将匹配至少一个o(如god,good,goood…)?:匹配前面子表达式0次或者1次 例如:go?d,将匹配gd或god():括号中的字符串作为一个整体 例如:(xyz)+,将匹配xyz整体1次以上,如xyzxyz|:以或的方式匹配字条串 例如1:good|food,将匹配good或者food 例如2:g(oo|la)d,将匹配good或者glad

(g|f)ood good或者food

egrep

示例

匹配o至少出现一次或者以上次数的内容

[root@server2 ~]# vi test.txt [root@server2 ~]# grep -n 'oo*' test.txt

[root@server2 ~]# vi test.txt [root@server2 ~]# egrep -n 'o+' test.txt

匹配以be为开头,t为结尾,中间可以是s或者为空的内容

[root@server2 ~]# egrep -n 'bes?t' test.txt

匹配以sh为开头,rt为结尾,中间可以是i或者o的内容

[root@server2 ~]# grep -n sh[io]rt test.txt [root@server2 ~]# egrep -n 'sh(i|o)rt' test.txt [root@server2 ~]# egrep -n sh'(i|o)'rt test.txt

匹配包含oo出现一次,或者一次以上的内容

[root@server2 ~]# egrep -n '(oo)+' test.txt

awk工具介绍

格式

awk 选项 ‘模式或条件 {编辑指令}’ 文件1 文件2awk -f 脚本文件 文件1 文件2

解析

awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell脚本,完成各种自动化配置任务。

awk工作原理

逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

内建变量

FS:指定每行文本的字段分隔符,默认为空格或制表位。NF:当前处理的行的字段个数。NR:当前处理的行的行号(序数)。$0: 当前处理的行的整行内容。$n:当前处理的行的第n个字段(第n列)。FILENAME:被处理的文件名RS:数据记录分隔,默认为\n,即每行为一条记录

用法

查找出在/etc/passwd所有文件信息的第1个,第7个字段内容

[root@server2 ~]# awk -F: '{print $1,$7}' /etc/passwd

查找出在/etc/passwd所有文件信息的第1个,第7个字段内容且以zjq为开头的和以/sbin/nologin结尾的内容

[root@server2 ~]# awk -F: '/^zjq/{print $1,$7}' /etc/passwd[root@server2 ~]# awk -F: '/\/sbin\/nologin$/{print $1,$7}'

内建变量用法示例

输出第3行的第1第7个字段

[root@server2 ~]# awk -F: 'NR==3{print $1,$7}' /etc/passwd

输出第3行到第6行的第1第7个字段,输出第3行,第6行的第1第7个字段,输出大于等于第3行小于等于第6行的第1第7个字段

[root@server2 ~]# awk -F: 'NR==3,NR==6{print $1,$7}' /etc/passwd[root@server2 ~]# awk -F: '(NR==3)||(NR==6){print $1,$7}' /etc/passwd[root@server2 ~]# awk -F: '(NR>=3)&&(NR<=6){print $1,$7}' /etc/passwd

输出奇数行,偶数行的行号

[root@server2 ~]# cat /etc/passwd | wc -l [root@server2 ~]# awk -F: '(NR%2)==1{print $1,$7}' /etc/passwd | wc -l[root@server2 ~]# awk -F: '(NR%2)==0{print $1,$7}' /etc/passwd | wc -l

统计以/bin/bash为结尾的行数

[root@server2 ~]# awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd

输出文件中每行中(以空格或制表符分隔)的第三个字段

[root@server2 ~]# awk '{print $3}' test.txt

输出文件中每行中(以空格或制表符分隔)的第一和三个字段

[root@server2 ~]# awk '{print $1,$3}' test.txt

输出没有设置密码的用户

[root@server2 ~]# awk -F: '$2=="!!"{print}' /etc/shadow [root@server2 ~]# awk 'BEGIN {FS=":"};$2=="!!"{print}' /etc/shadow

输出第7字段包含/bash,/bin/bash的用户

[root@server2 ~]# awk -F: '$7~"/bash"{print $1}' /etc/passwd[root@server2 ~]# awk -F: '$7~"/bin/bash"{print $1}' /etc/passwd

输出在/etc/services中第一个字段是nfs的且字段数是4个

[root@server2 ~]# grep "nfs" /etc/services[root@server2 ~]# awk '($1~"nfs")&&(NF==4){print $1}' /etc/services

输出第7字段不是/bin/bash也不是/sbin/nologin的内容

[root@server2 ~]# awk -F: '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd

调用wc -l命令并用来统计1以/bash为结尾的行数即用户数

[root@server2 ~]# awk -F: '/bash$/{print}' /etc/passwd | wc -l[root@server2 ~]# awk -F: '/bash$/{print | "wc -l"}' /etc/passwd [root@server2 ~]# grep -c "bash$" /etc/passwd

调用w命令统计在线的用户数

[root@server2 ~]# awk 'BEGIN {while ("w" | getline) n++; {print n-2}}'

调用hostname并输出当前的主机名

[root@server2 ~]# awk 'BEGIN {"hostname" | getline;print $0}'

输出path变量中的值,第三个字段的值

[root@server2 ~]# echo $PATH[root@server2 ~]# echo "$PATH" > a.txt[root@server2 ~]# cat a.txt [root@server2 ~]# awk -F: '{print}' a.txt[root@server2 ~]# awk -F: '{print$3}' a.txt

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。