这些东西经常用,才能熟悉
正则表达式,经常用,才记得住
把随手用到的记下来,方便自己查阅。
要求:stat命令可以查看一个文件的权限属性,诸如0644之类,现在只要求显示0644,不要求显示其他的,用Linux 命令完成
方法很多,只给出其一
先看stat命令的完整显示:
[root@*** ~]# stat /etc/services
File: `/etc/services'
Size: 362031 Blocks: 728 IO Block: 4096 regular file
Device: 802h/2050d Inode: 2588710 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-01-08 14:45:19.000000000 +0800
Modify: 2006-02-23 21:09:23.000000000 +0800
Change: 2012-07-06 02:13:28.000000000 +0800
下面就用sed命令,并结合正则表达式,来提取0644这个权限字符串。
[root@*** ~]# stat /etc/services | sed -n '/rw/p' | sed 's%^.*A.*(\([0-7]\{3,\}\).*$%\1%'
0644
命令解释:
先用sed命令的-n以及p参数结合,只打印符合要求的行,即包含rw字符串的行,这样的行才是我们需要的包含0644权限字符串的行。
再用sed命令中的 \( \) 寄存器的作用,提取0644这样的字符串,其中:
^.*A.*(
#以任意字符(除特殊字符以外,比如不可打印字符)开头,后面跟上任意多个任意字符并接续有A,并且A后面又是任意多个任意字符,再跟上一个左括号的字符形式;可以看到这样的正则表达式其实描述的就是Access: (
\([0-7]\{3,\}\).*$
#以数字0-7字符中的任意一个字符,并持续3次以上(其实就是四位数字权限位),并把这样的数字权限字符串用\(\)寄存器保存,这个数字权限字符串后面再跟上任意多个任意字符,直到行尾
\1
#提取第一号寄存器保存的内容,即刚才用括号寄存器保存的内容,也就是0644
相关的正则表达式:
[0-7]#数字0-7
\{3,\} #重复前面的字符3次或以上次数