第四周作业(正则表达式)

grep: Global search REgular expression and Print out the line.

        作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;

        模式:由正则表达式的元字符及文本字符所编写出的过滤条件;

    正则表达式引擎;

        grep  [OPTIONS]  PATTERN  [FILE…]

        grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE…]

            OPTIONS:

                –color=auto:对匹配到的文本着色后高亮显示;

                -i:ignorecase,忽略字符的大小写;

                -o:仅显示匹配到的字符串本身;

                -v, –invert-match:反向匹配,显示不能被模式匹配到的行;

                -E:支持使用扩展的正则表达式元字符;

                -q, –quiet, –silent:静默模式,即不输出任何信息;

                -A #:after, 后#行

                -B #:before,前#行

                -C #:context,前后各#行

    基本正则表达式元字符:

        字符匹配:

                . :匹配任意单个字符;

                []:匹配指定范围内的任意单个字符;

                [^]:匹配指定范围外的任意单个字符;

                [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

        匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

                *:匹配其前面的字符任意次;0,1,多次;

                    例如:grep "x\+y"

                        abxy

                        aby

                        xxxxxy

                        yab

                .*:匹配任意长度的任意字符

                \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;

                \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;

                \{m\}:匹配其前面的字符m次;

                \{m,n\}:匹配其前面的字符至少m次,至多n次;

                \{0,n\}:至多n次

                \{m,\}:至少m次

        位置锚定:

                ^:行首锚定;用于模式的最左侧;

                $:行尾锚定;用于模式的最右侧;

                ^PATTERN$:用于PATTERN来匹配整行;

                ^$:空白行;

                ^[[:space:]]*$:空行或包含空白字符的行;

        单词:非特殊字符组成的连续字符(字符串)都称为单词;

                \< 或 \b:词首锚定,用于单词模式的左侧;

                \> 或 \b:词尾锚定,用于单词模式的右侧;

                \<PATTERN\>:匹配完整单词;

        分组及引用

                \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

                \(xy\)*ab

        Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

            \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

            \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

            \3

            …

                He loves his lover.

                He likes his lover.

                She likes her liker.

                She loves her liker.

            ~]# grep  "\(l..e\).*\1"  lovers.txt

        后向引用:引用前面的分组括号中的模式所匹配到的字符;

egrep:支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

        egrep [OPTIONS] PATTERN [FILE…]

            选项:

                -i, -o, -v, -q, -A, -B, -C

                -G:支持基本正则表达式

        扩展正则表达式的元字符:

            字符匹配:

                .:任意单个字符

                []:指定范围内的任意单个字符

                [^]:指定范围外的任意单个字符

        次数匹配:

                *:任意次,0,1或多次;

                ?:0次或1次,其前的字符是可有可无的;

                +:其前字符至少1次;

                {m}:其前的字符m次;

                {m,n}:至少m次,至多n次; 

                {0,n}

                {m,}

        位置锚定:

                ^:行首锚定;

                $:行尾锚定;

                \<, \b:词首锚定;

                \>, \b:词尾锚定;

        分组及引用:

            ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;

                后向引用:\1, \2, …

        或:

                a|b:a或者b;

                C|cat:C或cat

                (c|C)at:cat或Cat

fgrep:不支持正则表达式元字符;

        当无需要用到元字符去编写模式时,使用fgrep必能更好;

1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/tuser1
[root@localhost ~]# chmod 700 /home/tuser1
[root@localhost ~]# ll -a /home/tuser1
total 16
drwx------   3 root root   74 Dec 28 19:21 .
drwxr-xr-x. 11 root root 4096 Dec 28 19:21 ..        #此为/home/tuser1的上一级目录
-rw-------   1 root root   18 Dec 28 19:21 .bash_logout
-rw-------   1 root root  193 Dec 28 19:21 .bash_profile
-rw-------   1 root root  231 Dec 28 19:21 .bashrcd
rwx------   4 root root   37 Dec 28 19:21 .mozilla

2、编辑/etc/group文件,添加组hadoop。

[root@localhost ~]# vim /etc/group 
peguin:x:2015:openstack
admins:x:2017:slackware
clouds:x:2018:nova:x:2019:openstack
mysql:x:983:
hadoop:x:2020:            编辑添加:G-->o在尾行添加

3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

[root@localhost ~]# vim /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
mysql:x:988:983::/home/mysql:/sbin/nologin
hadoop:x:2020:2020::/home/hadoop:sbin/bash            #新添加用户

4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

[root@localhost ~]# cp -r /etc/skel /home/hadoop
[root@localhost ~]# chmod 700 /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------   3 root root   74 Dec 28 19:44 .
drwxr-xr-x. 12 root root 4096 Dec 28 19:44 ..
-rw-r--r--   1 root root   18 Dec 28 19:44 .bash_logout
-rw-r--r--   1 root root  193 Dec 28 19:44 .bash_profile
-rw-r--r--   1 root root  231 Dec 28 19:44 .bashrc
drwxr-xr-x   4 root root   37 Dec 28 19:44 .mozilla

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------   3 hadoop hadoop   74 Dec 28 19:44 .
drwxr-xr-x. 12 root   root   4096 Dec 28 19:44 ..
-rw-r--r--   1 hadoop hadoop   18 Dec 28 19:44 .bash_logout
-rw-r--r--   1 hadoop hadoop  193 Dec 28 19:44 .bash_profile
-rw-r--r--   1 hadoop hadoop  231 Dec 28 19:44 .bashrc
drwxr-xr-x   4 hadoop hadoop   37 Dec 28 19:44 .mozilla

6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

[root@localhost ~]# grep -i "^s" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87316 kB
SReclaimable:      51960 kB
SUnreclaim:        35356 kB
[root@localhost ~]# grep "^[sS]" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87308 kB
SReclaimable:      51960 kB
SUnreclaim:        35348 kB
[root@localhost ~]# grep "^\(s\|S\)" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87332 kB
SReclaimable:      51960 kB
SUnreclaim:        35372 kB

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd
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
Xfei:x:1000:1000:fei:/home/Xfei:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
hadoop:x:2020:2020::/home/hadoop:sbin/bash
[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
Xfei
user1
user2
user3
mageia
slackware
openstack
hadoop

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

[root@localhost ~]# grep "/bin/bash" /etc/passwd | cut -d: -f1
root
Xfei
user1
user2
user3
mageia
openstack

9、找出/etc/passwd文件中的一位数或两位数;

[root@localhost ~]# grep -E "\<[0-9]{1,2}\>" /etc/passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
...

10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

[root@localhost ~]# grep -E "^[[:space:]]+" /boot/grub/grub.conf
grep: /boot/grub/grub.conf: No such file or directory     #好尴尬,没有此文件

11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

[root@localhost ~]# grep -E "^#[[:space:]]+[^[:space:]]" /etc/rc.d/rc.sysinit 
grep: /etc/rc.d/rc.sysinit: No such file or directory    #依然没有此文件

12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

[root@localhost ~]# netstat -tan | grep  "LISTEN[[:space:]]*$"
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN

13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

[root@localhost ~]# useradd bash
[root@localhost ~]# useradd testbash
[root@localhost ~]# useradd basher
[root@localhost ~]# useradd -s /sbin/nologin nologin
[root@localhost ~]# grep -E -o "^([^:]+\>).*\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:3004:3004::/home/bash:/bin/bash
nologin:x:3007:3007::/home/nologin:/sbin/nologin

原创文章,作者:小飝,如若转载,请注明出处:http://www.178linux.com/65166

(0)
小飝小飝
上一篇 2016-12-28
下一篇 2016-12-28

相关推荐

  • 马哥教育网络班22期第1周课程作业

    一、基础中的基础————–计算机的组成部分         计算机组成分为硬件系统与软件系统         硬件包括五个部分     1.控制器:控制器 I/O 存储器 &nbs…

    Linux干货 2016-08-15
  • Python from entry to abandon

          学习Linux已经有大致两周了,依然感觉到自己仍然在运维的大门外徘徊。于是我想要找到一个在Linux之外的业余方向,可以作为枯燥基础学习的调节。没过多久我就发现了Python可以 说是钦定的选择,它作为Linux的内置语言,传言风格简洁优美,功能强大。Python老生常谈的缺点是效率不高,哎,没办…

    Linux干货 2017-04-01
  • Bash的基础特性(二)

    Bash的基础特性(二) glob文件通配符 (* ; ? ; [ ] ; [^ ] ) 星号* 匹配任意所有字符的 [root@lyp ~]# ls h* hello.sh hello.shbak ?匹配单个字符 ls ???? 查看四个字符命名的文件 [0-9]匹配数字 [a-z] 字母 字母的顺序安装 a A b B c C… z Z 匹配的a-z […

    Linux干货 2017-04-01
  • Cobbler实现多系统自动化安装

    Cobbler介绍:  Cobbler能够快速建立多系统同时安装的网络系统安装环境;传统的pxe+dhcp+tftp+kickstart仅能够提供单一系统安装,功能过于简单;如果遇到安装不同操作系统时就遇到瓶颈;而cobbler正好解决了这一问题。Cobbler是增强版的网络系统安装。 Cobbler由不同的组件配合完成系统安装,各组件之间配合如下…

    Linux干货 2015-08-11
  • class8 文本处理工具sed和vim编辑器

    一、处理文本的工具sed     Stream EDitor,  行编辑器     sed是linux上一款比较重要的流编辑器。     特点:一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕。这样不断重复,直到文件末尾。 &…

    Linux干货 2016-08-11
  • Linux的终端类型

    1、串行端口终端(/dev/ttySn):       串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev…

    Linux干货 2016-10-14