正则表达式用法总结

Regular Expression(正则表达式)

grep

  • global regular expression print

  • grep 查找文本中某种正则表达式的出现并输出匹配的行

  • grep使用方法:grep [options] regular_expression [file…],这样将查找files中所有匹配正则表达式的行

  • 常用options:

    • -i: 忽略大小写
    • -v: 反转匹配,只显示不匹配的
    • -c: 显示匹配的数量,-v显示不匹配的数量
    • -l: 输出匹配的文件名,而不是行
    • -h: 输出不显示文件名
  • 元字符(Metacharacters): ^ $ . [ ] { } - ? * + ( ) | \

  • 使用包含元字符的正则表达式时,必须用引号' '括起来来避免歧义

  • .: 任意字符,至少一个

  • ^,$: 铆,^表示正则表达式只能出现在行首,$表示只能出现在行尾:

    [me@linuxbox ~]$ grep -h '^zip' dirlist*.txt
    zip
    zipcloak
    zipgrep
    zipinfo
    zipnote
    zipsplit
    [me@linuxbox ~]$ grep -h 'zip$' dirlist*.txt
    gunzip
    gzip
    funzip
    gpg-zip
    preunzip
    prezip
    unzip
    zip
    [me@linuxbox ~]$ grep -h '^zip$' dirlist*.txt
    zip
    

    单独的^$将会匹配空行

  • 括号表达式和字符集:匹配[]中出现的单个字符,例如

    grep -h '[bg]zip' dirlist*.txt
    

    将获得所有包含bzip或者gzip的文本行。出现在括号表达式内的元符号失去正则表达式的含义,但是有两个例外是^(用于表示逻辑非操作)和-(用于表示范围)

    [me@linuxbox ~]$ grep -h '[^bg]zip' dirlist*.txt
    

    将输出除了包含bzipgzip以外的组合方式

    [me@linuxbox ~]$ grep -h '^[A-Z]' dirlist*.txt
    

    将输出所有首字母为大写的文本行

  • |:或。|本身是pipe操作,即将前面一个表达式的输出作为后面的输入,在正则表达式中表示多种匹配的结果取并集,使用时需要加-Eflag(Extended feature)

  • ?:匹配零次或一次,表示?前面的字符是可选的。例如匹配合法的电话号码,有两种形式是合法的,(nnn) nnn-nnnn或者nnn nnn-nnnn,可以使用如下正则表达式:

    ^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$
    

    其中\(中的\表示转义,因为圆括号是元字符,两个?使得括号的出现是可有可无的

  • *:匹配零次或者多次。可以用于判断一个句子是否合法(由大写字母开头,后面是由大小写字母和空格组成,句号结尾): [[:upper:]][[:upper:][:lower:] ]*\.

  • +:匹配一次或者多次。

  • {}:匹配指定次数

    • {n}:匹配恰好n次
    • {n,m}:出现次数大于等于n小于等于m
    • {n,}:出现次数大于等于n
    • {,m}:出现次数小于等于m

    还是前面匹配电话号码的例子,可以利用花括号表达式改进为:

    ^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$
    

可以使用-regexfind中使用正则表达式:

[me@linuxbox ~]$ find . -regex '.*[^-_./0-9a-zA-Z].*'

上述命令可以找到包含空格或不合法的文件名。

可以使用--regexlocate中使用正则表达式:

[me@linuxbox ~]$ locate --regex 'bin/(bz|gz|zip)'

使用less可以在文本文档中进行搜索并高亮显示,按/然后输入正则表达式即可

[me@linuxbox ~]$ less phonelist.txt
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值