*7 正则表达式的练习

简介:

1.grep/egrep正则表达式练习:

  1) 显示/etc/passwd文件中不以bash结尾的行;


[root@centos-64-72a ~]# grep -v "/bash$" /etc/passwd|wc

     42      88    2237

(基本正则表达式匹配信息,-v选项是不匹配pattern,$符号是代表的是行尾锚定)

[root@centos-64-72a ~]# grep -v "/bash\>" /etc/passwd|wc

     42      88    2237

(基本正则表达式匹配信息,-v选项是不匹配pattern,\>符号是代表的是字尾锚定)

pattern内容需使用“”符号引用起来

以上的pattern因为是在一起可以把它当成字符段,也可以把它当成字符行;


  2) 找出ifconfig命令执行结果中的两位或三位整数;


[root@centos-64-72a ~]# ifconfig|grep "\<[1-9][0-9]\|[1-9][0-9][0-9]\>"|wc

     14      78     791

(基本正则表达式匹配信息,\<,\>符号代表字首与字尾锚定,[0-9]代表数字字符匹配)


  3) 找出/etc/grub2.cfg(在CentOS6中是/etc/grub.conf)文件中,以空白字符开头的非空白行;


[root@centos-64-72a ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg|wc

     64     169    2121

(基本正则表达式匹配信息,^符号是代表的是行首锚定,[[:space:]]\+代表匹配一个空格或多个空格,[^[:space:]]代表匹配非空格)

[root@centos-64-72a ~]# egrep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg|wc

     64     169    2121

(扩展正则表达式匹配信息,^符号是代表的是行首锚定,[[:space:]]\+代表匹配一个空格或多个空格,[^[:space:]]代表匹配非空格,扩展正则表达式可以


省略大多数的\符号)


  4) 找出"netstat -tan”命令的结果中,以"LISTEN"后跟任意个空白字符结尾的行;


[root@centos-64-72a ~]# netstat -tan | grep "LISTEN[[:space:]]*$"|wc

      9      54     720


  5) 找出"fdisk -l“命令的结果中,包含以/dev/后跟sd或hd及一个小写字母的行;


[root@centos-64-72a ~]# fdisk -l | grep "/dev/\(sd\|hd\)[a-z]"|wc

      4      28     271

[root@centos-64-72a ~]# fdisk -l | egrep "/dev/(sd|hd)[a-z]"|wc

      4      28     271

[root@centos-64-72a ~]# fdisk -l | grep "/dev/[sh]d[a-z]"|wc

      4      28     271

(sd\|hd代表sd或hd)


  6) 找出"ldd /usr/bin/vim"命令的结果中所有的文件路径;


[root@centos-64-72a ~]# ldd /usr/bin/vim|grep -o "/[^[[:space:]]\+"|wc

     19      19     404


  7) 找出/proc/meminfo文件中,所有以大写S或小写s开头的行,你有多少种方法实现该任务?


[root@centos-64-72a ~]# cat /proc/meminfo|grep "^[Ss]"

[root@centos-64-72a ~]# cat /proc/meminfo|grep "^S\|^s"

grep -i "^s" /proc/meminfo

grep -e "^s" -e "^S" /proc/meminfo

grep -f sos /proc/meminfo


  8) 使用egrep取出某个路径的基名;


[root@centos-64-72a ~]# echo /etc/passwd|egrep -o "[^/]+/?$"

passwd

[root@centos-64-72a ~]# echo /etc/passwd|egrep -o "[^/]+$"

passwd

(-o选项表示关闭贪婪模式,[^/]+表示不要/符号但是/符号至少出现了一次,/?表示/符号可有可无,$符号表示锚定行尾)


  9) 显示出ifconfig命令结果中的0-255之间的整数;


[root@centos-64-72a ~]# ifconfig | grep "\<[0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\>"|wc

     14      78     801

[root@centos-64-72a ~]# ifconfig | egrep "<[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]>"|wc

     14      78     801


  10) 添加用户bash, testbash, basher, nologin, unlogin, logining,要求前三个用户的默认shell为/bin/bash,后三个用户的默认shell


为/sbin/nologin,而后找出其用户名与shell名相同的用户信息;


[root@centos-64-72a ~]# useradd -s /bin/bash bash;useradd -s /bin/bash testbash;useradd -s /bin/bash basher;useradd -s /sbin/nologin 


nologin;useradd -s /sbin/nologin unlogin;useradd -s /sbin/nologin logining

[root@centos-64-72a ~]# egrep "^([[:alnum:]]*\>).*\1$" /etc/passwd

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

bash:x:8093:8094::/home/bash:/bin/bash

nologin:x:8096:8097::/home/nologin:/sbin/nologin

(([[:alnum:]]*\>)表示匹配组,.*表示任意长度字符\1表示(([[:alnum:]]*\>)))


2.脚本练习:

  1) 编写一个脚本,要求:

    统计/etc, /var, /usr目录中所有非隐藏的一级子目录和文件的数量总和;


[root@centos-64-72a ~]# vim wc

#!/bing/bash

#脚本说明:统计/etc, /var, /usr目录中所有非隐藏的一级子目录和文件的数量总和;

#版本说明:牛刀小试

ls /etc /var /usr|egrep "[^.]"|wc -l

:wq

[root@centos-64-72a ~]# sh wc

314

#!/bing/bash

#脚本说明:统计/etc, /var, /usr目录中所有非隐藏的一级子目录和文件的数量总和;

#版本说明:牛刀小试

etc=$(ls /etc|wc -l)

var=$(ls /var|wc -l)

usr=$(ls /usr|wc -l)

num=$[etc+var+usr]

echo $num


(脚本首行必须是shebang,也就是#!/bing/bash,除了shebang之外,以#占据绝对行首的内容,均为注释行;解释器会忽略这样的行的内容)


  2) 编写一个脚本,要求:

    对于目录/tmp/testdir1,如果当前有效用户有读、写和执行的权限,那么就在该目录中创建一个文件;否则,显示“没有权限不能创建文件”的信息。


[root@centos-64-72a ~]# vim touch

#!/bing/bash

#脚本说明:对于目录/tmp/testdir1,如果当前有效用户有读、写和执行的权限,那么就在该目录中创建一个文件;否则,显示“没有权限不能创建文件”


的信息。

#版本说明:牛刀小试

test -r /tmp/testdir1&&test -w /tmp/testdir1&&test -x /tmp/testdir1&&touch /tmp/testdir1/创建文件||echo "没有权限不能创建文件"

:wq

[root@centos-64-72a ~]# sh touch

(这个脚本对root权限用户无效,只对普通用户有效.)


  3) 编写一个脚本,要求:

    从/etc/passwd中UID和GID相同的用户中随机选择一个用户,判断其用户名和基本组名是否相同;


#!/bing/bash

#脚本说明:从/etc/passwd中UID和GID相同的用户中随机选择一个用户,判断其用户名和基本组名是否相同;

#版本说明:牛刀小试

HOICEUSER=$(egrep "(\<[0-9]+\>).*\1" /etc/passwd|sort -R|head -1|cut -d: -f1)

CHOICEGROUP=$(id -gn CHOICEUSER)

[ $CHOICEUSER == $CHOICEGROUP ]&& echo 相同||echo 不相同


本文转自谁等了谁 51CTO博客,原文链接:http://blog.51cto.com/12486569/1915752

相关文章
|
JavaScript 前端开发
带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(1)
带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(1)
|
JavaScript 前端开发
带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(2)
带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(2)
|
JavaScript 前端开发
《现代Javascript高级教程》正则表达式的常见问题与练习
正则表达式的常见问题与练习 正则表达式是面试中经常被提及的主题之一,但很多人在面试中对于正则表达式的问题常常感到困惑。在本节中,我将通过一些常见问题和练习题目来帮助你更好地理解和掌握正则表达式的技巧。
64 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
65 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
60 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
50 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
66 0
|
PHP 数据安全/隐私保护
PHP实现简单的注册页面(正则表达式练习)
html实现简单的注册表单,然后使用php实现简单的数据验证(运用正则表达式)
234 0
PHP实现简单的注册页面(正则表达式练习)
|
开发者 Python
正则表达式练习 | 学习笔记
快速学习 正则表达式练习
472 0
练习正则表达式的好方法推荐
练习正则表达式的好方法推荐
721 0