linux 正则表达式取数字,51CTO博客-专业IT技术博客创作平台-技术成就梦想

这些东西经常用,才能熟悉

正则表达式,经常用,才记得住

把随手用到的记下来,方便自己查阅。

要求: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次或以上次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值