码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2015-08-28 21:44:37      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:表达式   用户   

一、命令总结

1、chmod:修改文件的用户权限

语法:

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

参数:

-R:递归修改
    --reference=/path/to/somefile file... 
    chmod 755 file... 
修改某类用户的某些权限:
    u:属主
    g:属组
    o:其他
    a:所有
        chmod 用户类别=MODE ...
        chmod u=rw,g=r /fiel...
修改某类的用户某位或某些位权限
        chmod 用户类别[-/+]MODE fiel...

示例1:修改/tmp/fstab文件的权限:属主为rwx,属组为rw,其他为rw

[root@node1 ~]# cp /etc/fstab /tmp/
[root@node1 ~]# ll /tmp/fstab 
-rw-r--r--. 1 root root 860 Aug 28 08:21 /tmp/fstab
[root@node1 ~]# chmod 755 /tmp/fstab 
[root@node1 ~]# ll /tmp/fstab 
-rwxr-xr-x. 1 root root 860 Aug 28 08:21 /tmp/fstab
[root@node1 ~]#

示例2:修改/tmp/fstab文件的权限:删除属组和其他的执行权限

[root@node1 ~]# ll /tmp/fstab 
-rwxr-xr-x. 1 root root 860 Aug 28 08:21 /tmp/fstab
[root@node1 ~]# chmod go-x /tmp/fstab 
[root@node1 ~]# ll /tmp/fstab 
-rwxr--r--. 1 root root 860 Aug 28 08:21 /tmp/fstab
[root@node1 ~]#

2、chown:修改文件的属主、属组,只有管理员使用此命令

语法:

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

参数:

-R 递归修改(修改目录及其内部文件的属主)
--reference=/path/to/somefile file... 把file的属主设定为与somefile的属主一样
    chown USERNAME:GRPNAME fiel...同时改变属主和属组
    chown USERNAME,GRPNAME fiel...同时改变属主和属组
    chown :GROUPNAME fiel...    只修改属组

示例1:修改/tmp/fstab文件的属主和属组为centos用户

[root@node1 tmp]# ll
total 4
-rwxr--r--. 1 root root 860 Aug 28 08:21 fstab
[root@node1 tmp]# chown centos:centos /tmp/fstab 
[root@node1 tmp]# ll
total 4
-rwxr--r--. 1 centos centos 860 Aug 28 08:21 fstab
[root@node1 tmp]#

示例2:修改/tmp/fstab文件的属组为root用户

[root@node1 tmp]# ll
total 4
-rwxr--r--. 1 centos centos 860 Aug 28 08:21 fstab
[root@node1 tmp]# chown :root /tmp/fstab 
[root@node1 tmp]# ll
total 4
-rwxr--r--. 1 centos root 860 Aug 28 08:21 fstab
[root@node1 tmp]#

3、grep:基于正则表达式的文本过虑的工具

grep是一个支持正则表达式,基于正则表达式能够完成文本过虑的工具。根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行。

语法:

grep [OPTIONS] PATTERN [FILE...]

参数:

    --color[=WHEN], --colour[=WHEN]-o:只显示被模式匹配到的内容

    -i:ignore case,不区分字符大小写

    -v:显示不能够被模式匹配到的行

    -o:只显示被模式匹配的字符串

    -E:使用扩展的正则表达式

    -A NUM:显示匹配行数的后NUM行

    -B NUM:显示匹配行数的前NUM行

    -C NUM:显示匹配行数的前后各NUM行


示例1:搜索有root的行,并语法作色

[root@node1 ~]# grep --color=auto "root" /etc/passwd    #语法作色
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@node1 ~]#

示例2:引用变量搜索有root的行,并语法作色

[root@node1 ~]# user=‘root‘
[root@node1 ~]# grep --color=auto "$user" /etc/passwd  #变量替换需要加双引号
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@node1 ~]#

示例3:给grep临时添加别名grep,通过别名搜索有root的行,并语法作色

[root@node1 ~]# alias grep=‘grep --color=auto‘    #给grep添加别名
[root@node1 ~]# grep ‘root‘ /etc/passwd           #不加--color=auto也可以匹配字符作色
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@node1 ~]#


二、正则表达式


基本正则表达式:REGular EXPression  简写:REGEXP

    是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能;



基本正则表达式元字符:

    字符匹配:

        .:匹配任意单个字符;

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

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

        [0-9]或[[:digit:]]:匹配任意单个数字;

        [^0-9]或[^[:digit:]]:匹配非数字的单个字符;

        [a-z]或[[:lower:]]:匹配任意单个小写字母;

        [A-Z]或[[:upper:]]:匹配任意单个大写字母;

        [0-9a-zA-Z]或[[:alnum:]]:匹配所有的字母或数字(区分大小写)

        [a-zA-Z]或[[:alpha:]]:匹配所有的字母

        [[:space:]]:匹配所有的空白符

        [[:punct:]]:匹配所有的标点符

    次数匹配:

            在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数;

        *:任意长度,前面的字符的任意长度,表示0次、1次或多次;

        .*:任意长度的任意字符,工作于贪婪模式,尽可以长的去匹配;

        \?:匹配其前的字符0次或1次:表示其左侧字符可有可无;

        \+:1次或多次:表示其左侧字符必须要有1个,或表示其左侧字符至少出现1次;

        \{m\}:m次:表示其左侧字符精确出现m次;

        \{m,n\}:精确m次,至多n次:表示其左侧字符精确出现m次,最多出现n次;

    位置锚定:

        ^:锚定行首    ^PATTERN

        $:锚定行尾    PATTERN$

        ^PATTERN$:用模式来匹配整行;

        ^$:匹配纯空白行;

        单词锚定:

            由非特殊字符组成的连续的字符串;

        \<:锚定词首,也可用\b:\<PATTERN,或\bPATTERN

        \>:锚定词尾,也可以用\b:PATTERN\>,或PATTERN\b

        \<PATTERN\>:匹配PATTERN能匹配到的整个单词

    分组:\(\)

         注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量是\1,\2,...),因此,还可以被引用;

        \1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;

        \2:引用,模式中自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容;



扩展的正则表达式:

    grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。


grep:基本正则表达式

grep -E,egrep:扩展正则表达式

fgrep:fast,不支持使用正则表达式    


扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符。

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

    次数匹配:

        *:任意长度,前面的字符的任意长度,表示0次、1次或多次;

        .*:任意长度的任意字符,工作于贪婪模式,尽可以长的去匹配;

        ?:匹配其前的字符0次或1次:表示其左侧字符可有可无;

        +:1次或多次:表示其左侧字符必须要有1个,或表示其左侧字符至少出现1次;

        {m}:m次:表示其左侧字符精确出现m次;

        {m,n}:精确m次,至多n次:表示其左侧字符精确出现m次,最多出现n次;



三、作业


1、显示/etc/passwd文件中以bash结尾的行

[root@node1 tmp]# grep "bash\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
duyong:x:500:500::/home/duyong/:/bin/bash
centos:x:501:502::/home/centos:/bin/bash
ubuntu:x:502:503::/home/ubuntu:/bin/bash
grid:x:498:498::/home/grid:/bin/bash
[root@node1 tmp]#

2、显示/etc/passwd文件中的两位数或三位数

[root@node1 tmp]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
duyong:x:500:500::/home/duyong/:/bin/bash
centos:x:501:502::/home/centos:/bin/bash
ubuntu:x:502:503::/home/ubuntu:/bin/bash
grid:x:498:498::/home/grid:/bin/bash
[root@node1 tmp]#

3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

[root@node1 tmp]# netstat -tan | grep "LISTEN[[:space:]]*$"
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 ::1:25                      :::*                        LISTEN      
[root@node1 tmp]#

4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行

5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)

6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名

8、找出ifconfig命令执行结果中1-255之间的数字


本文出自 “啊杜” 博客,请务必保留此出处http://253737.blog.51cto.com/243737/1689360

正则表达式

标签:表达式   用户   

原文地址:http://253737.blog.51cto.com/243737/1689360

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!