sed中的正则匹配

作者: 生信编程日常 | 来源:发表于2020-06-28 20:59 被阅读0次

    sed很早就支持正则表达式了,这在文件处理中非常有用,以下列出一些常见用法(GNU SED版本)。

    1. 行首/行尾

    行首用^表示,行尾用$表示。例如有如下test.txt文件:


    如果我们想把其中第一列的Potri.去掉,那么可以:

    sed 's/^Potri.//g' test.txt 
    

    假如想在最后数字的后面加一列"yes":

    sed 's/$/\tyes/g' test.txt
    
    2. 匹配字符

    (来自https://wiki.jikexueyuan.com/project/unix/regular-expressions.html)

    比较常用的有:

    字符 含义
    . 匹配除换行符以外的任意字符
    \w 匹配字母或数字或下划线
    \s 任意的空白符(包括空格制表符换页符)
    [0-9] 任意0到9中数字
    [a-zA-Z] 26个英文字母中的一个,不区分大小写
    3. 匹配在列表中的任意字符

    用[]代表这样的列表,比如:

    echo -e "Cat\nBat\nHat" | sed -n '/[CH]at/ p'
    

    结果输出:
    Cat
    Hat
    []代表从其中选择一个。

    4. 不在列表中的任意字符
    echo -e "Cat\nBat\nHat" | sed -n '/[^CH]at/ p'
    

    仅输出Bat。

    5. 匹配出现某种次数(+; * ; ?; {n}; {n,}; {m,n})

    出现不止一次(>= 1): \+
    出现0或1次:\?
    出现n次:{n}
    出现>=n次:{n,}
    出现m到n次:{m, n}

    注意前后括号{}都需要转义。

    6. 或者

    或者 | 常与 () 一起使用,注意两者都需要反斜杠\转义。

    echo -e "Cat\nBat\nHat" | gsed -n '/\(C\|B\|H\)at/p'
    
    7. 特殊字符转义

    一些特殊字符比如换行符\n或者回车\r等,匹配的时候在前面再加一个反斜杠转义,如\\r。

    8. 例子

    匹配上海市电话号码:

    # eg. 021-52060888
    echo 021-52060888 | sed -n '/^012-[0-9]\{8\}/p'
    

    匹配ip地址:

    echo '127.255.255.254' | sed -n '/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/p'
    

    值得注意的是,在sed中不支持\d匹配数字,此处须用[0-9]。

    欢迎关注!


    相关文章

      网友评论

        本文标题:sed中的正则匹配

        本文链接:https://www.haomeiwen.com/subject/ucxgfktx.html