美文网首页
Linux 正则表达式

Linux 正则表达式

作者: 歌哥居士 | 来源:发表于2019-03-28 08:45 被阅读0次

    通配符

    * 代表任意字符
    ? 代表任意一个字符
    [] 代表中括号内任意一个字符

    $ touch newFile
    $ touch neqFile
    $ ls
    neqFile newFile
    $ ls ne*
    neqFile newFile
    $ ls ne?File
    neqFile newFile
    $ ls ne[wq]File
    neqFile newFile
    

    正则表达式

    * 匹配前一个字符0-任意次。
    + 匹配前一个字符1-任意次。
    ? 匹配前一个字符0或1次。
    . 匹配换行符以外任意一个字符
    ^ 匹配首。^baozi表示以baozi开头的。
    $ 匹配尾。baozi$表示以baozi结尾的。
    [] 匹配括号中任意一个字符。
    [^] 匹配[]取反。
    \ 转义符。
    \{n\} 匹配n次。
    \{n,\} 匹配不小于n次。
    \{n,m\} 匹配最小n次,最多m次。
    \d 任意数字
    \w 任意字母、数字、_
    \s 任意空白字符
    # 从左到右匹配,删掉第一个
    ## 从左到右匹配,删掉全部
    % 从右开始,与#相反
    %% 从右开始,与##相反

    示例:*
    第一次可以出现a也可以没有,所以全都显示了。
    第二次必须有一个a,所以出现部分符合要求的。

    $ grep --color=auto "a*" regFile
    a
    aa
    aaa
    aaaa
    
    b
    bb
    bbb
    bbbb
    
    
    $ grep --color=auto "aa*" regFile
    a
    aa
    aaa
    aaaa
    

    示例:+
    注意需要加上\ +

    $ grep "se\+" regFIle
    sesesese
    se
    seeeeeeese
    +se+se+
    $ grep "se+" regFIle
    +se+se+
    

    示例:.
    我在.bashrc文件中加入了alias grep='grep --color=auto',然后source生效

    $ grep "s.id" regFile
    said
    soid
    $ grep "s..d" regFile
    said
    soid
    suud
    $ grep "s.*d" regFile
    said
    soid
    suud
    sooooood
    

    示例:^

    $ grep "^s" regFile
    said
    soid
    suud
    sooooood
    

    示例:$

    $ grep "d$" regFile
    said
    soid
    suud
    sooooood
    

    示例:^$(匹配空白行)

    $ grep "^$" regFile
    
    
    
    $ grep -n "^$" regFile
    3:
    5:
    6:
    

    示例:[]

    $ grep "s[ao]id" regFile
    said
    soid
    

    示例:[^]

    $ grep "s[^ao][^i]d" regFile
    suud
    

    示例:\

    $ grep "aad\.*" regFile
    aad..asdasd
    

    示例:{n}

    $ grep "a\{2\}" regFile
    112aaaaa
    aad..asdasd
    $ grep "a\{2\}d" regFile
    aad..asdasd
    $ grep "2a\{2\}" regFile
    112aaaaa
    

    示例:{n,}

    $ grep "a\{2,\}" regFile
    112aaaaa
    aad..asdasd
    $ grep "2a\{2,\}" regFile
    112aaaaa
    $ grep "a\{2,\}d" regFile
    aad..asdasd
    

    示例:{n,m}

    $ grep "a\{2,3\}" regFile
    112aaaaa
    aad..asdasd
    

    示例:\d

    $ grep "\d\{1\}" regFile
    1214
    124155
    112aaaaa
    

    示例:\w

    $ grep "\w" regFile
    said
    soid
    suud
    sooooood
    1214
    124155
    112aaaaa
    aad..asdasd
    aa  sets
    

    示例:\s

    $ grep "\s\{2\}" regFile
    aa  sets
    

    示例:#、##、%、%%

    假设我们定义了一个变量为:
    file=/dir1/dir2/dir3/my.file.txt
    可以用${ }分别替换得到不同的值:
    ${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
    ${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
    ${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
    ${file##*.}:删掉最后一个 .  及其左边的字符串:txt
    ${file%/*}:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
    ${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
    ${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
    ${file%%.*}:删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my
    
    记忆的方法为:
    # 是 去掉左边(键盘上#在 $ 的左边)
    %是去掉右边(键盘上% 在$ 的右边)
    单一符号是最小匹配;两个符号是最大匹配
    ${file:0:5}:提取最左边的 5 个字节:/dir1
    ${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
    

    相关文章

      网友评论

          本文标题:Linux 正则表达式

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