Linux 正则表达式

正则表达式

基本正则表达式

注: 本文路径有可能不一样test和tmp(懒)

//元字符
    .           //任意单个字符
    []          //匹配指定范围内的任意单个字符
    [^]         //匹配指定范围外的任意单个字符

[root@localhost test]# ls
aaa   aab   aac   aba   abb   abc   aca   acb   acc   baa   bab   bac   bba   bbb   bbc   bca   bcb   bcc   caa   cab   cac   cba   cbb   cbc   cca   ccb   ccc
aaa1  aab1  aac1  aba1  abb1  abc1  aca1  acb1  acc1  baa1  bab1  bac1  bba1  bbb1  bbc1  bca1  bcb1  bcc1  caa1  cab1  cac1  cba1  cbb1  cbc1  cca1  ccb1  ccc1
aaa2  aab2  aac2  aba2  abb2  abc2  aca2  acb2  acc2  baa2  bab2  bac2  bba2  bbb2  bbc2  bca2  bcb2  bcc2  caa2  cab2  cac2  cba2  cbb2  cbc2  cca2  ccb2  ccc2
aaa3  aab3  aac3  aba3  abb3  abc3  aca3  acb3  acc3  baa3  bab3  bac3  bba3  bbb3  bbc3  bca3  bcb3  bcc3  caa3  cab3  cac3  cba3  cbb3  cbc3  cca3  ccb3  ccc3

[root@localhost test]# ls |grep a.c   # a加任意字符加c
aac
aac1
aac2
aac3
abc
abc1
abc2
abc3
acc
acc1
acc2
acc3

[root@localhost test]# ls |grep a'[b-c]'c   #a加b到c加c
abc
abc1
abc2
abc3
acc
acc1
acc2
acc3

[root@localhost test]# ls|grep 'ab[^c]'      #匹配前面是ab后面不接c的所有
aab1
aab2
aab3
aba
aba1
aba2
aba3
abb
abb1
abb2
abb3
bab1
bab2
bab3
cab1
cab2
cab3

[root@localhost test]# ls|grep '^ab[^c]'       #锚定ab在开头后面不是c的所有
aba
aba1
aba2
aba3
abb
abb1
abb2
abb3

匹配次数(贪婪模式)


    *           //匹配其前面的任意单个字符任意次
    .*          //任意长度的任意字符
    \?          //匹配其前面的任意单个字符1次或0次
    \+          //匹配其前面的任意单个字符至少1次
    \{m,n\}     //匹配其前面的任意单个字符至少m次,至多n次
  • 匹配任意次数a结尾文件

[root@localhost test]# ls|grep 'a\{1,3\}$'
aaa
aba
aca
baa
bba
bca
caa
cba
cca
  • 匹配ab加任意字符的任意次数b加1的文件(同一个字符任意次数)
[root@localhost tmp]# ls |grep '^ab.*1$'
aba1
abb1
abc1
  • 匹配 至少一次a加c的件
[root@localhost test]# ls |grep '^a\+c'
aac
aac1
aac2
aac3
aca
aca1
aca2
aca3
acb
acb1
acb2
acb3
acc
acc1
acc2
acc3

定位过滤


//位置锚定
    ^           //锚定行首,此字符后面的任意单个字符必须出现在行首
    $           //锚定行尾,此字符前面的任意单个字符必须出现在行尾
    ^$          //空白行
    \<或\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
    \>或\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
    
  • 匹配以a开头以c结尾的中间只有一个b的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep '^abc$'
abc
  • 匹配a开头以b结尾的文件
//多种方法看自己喜好吧
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep '\bab\b'
ab
[root@localhost tmp]# ls |grep '^ab$'
ab
[root@localhost tmp]# ls |grep '\<ab\>'
ab

分组

/分组
    \(\)
    例:\(ab\)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容

扩展正则表达式

//字符匹配
    .       //匹配任意单个字符
    []      //匹配指定范围内的任意单个字符
    [^]     //匹配指定范围外的任意单个字符
  • 匹配a开头加一个任意字符加bc结尾的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^a.bc$'
aabc
abbc
  • 匹配a加小写字母加c的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^a[a-z]c$'
aac
abc
acc
  • 匹配ab加不是小写字母的字符加c文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab[^a-z]c$'
ab2c

次数匹配

//次数匹配
    *       //匹配其前面的任意单个字符任意次
    ?       //匹配其前面的任意单个字符1次或0次
    +       //匹配其前面的任意单个字符至少1次
    {m,n}   //匹配其前面的任意单个字符至少m次,至多n次
  • 匹配a加任意次数的b加c文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab*c$'
abbbc
abbc
abc
ac
  • 匹配a加1次或0次的b的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab?c$'
abc
ac
  • 匹配a加1以上次数b加次的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab+c$'
abbbc
abbc
abc
  • 匹配a加3到4次的b加c的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab{3,4}c$'
abbbc

锚定匹配

//位置锚定
    ^       //锚定行首,此字符后面的任意单个字符必须出现在行首
    $       //锚定行尾,此字符前面的任意单个字符必须出现在行尾
    ^$      //空白行
    \<或\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
    \>或\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
    
  • 匹配以a为行首b为行尾的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abb   abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab$'
ab
[root@localhost tmp]# ls |grep -E '\<ab\>'
ab
[root@localhost tmp]# ls |grep -E '\bab\b'
ab
//分组
    ()      //分组
    \1,\2,\3,....
   例:(ab)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
//或者
    |       //or 默认匹配|的整个左侧或者整个右侧的内容
    //例:C|cat表示C或者cat,要想表示Cat或者cat则需要使用分组,如(C|c)at
  • 匹配以任意次数ab加c的文件
[root@localhost tmp]# ls
a          aaabbbc  aabc  ab     ab2c     ababc  abbbc  abc  acb2c  bba
aaaabbbbc  aabbc    aac   ab22c  abababc  abb    abbc   ac   acc
[root@localhost tmp]# ls |grep -E '^ab*c$'
abbbc
abbc
abc
ac
[root@localhost tmp]# ls |grep -E '^(ab)*c$'
abababc
ababc
abc
  • 好玩的实例
[root@localhost tmp]# echo '天下无双 雄霸天下 纵横天下' |sed -r 's/天下无双 (.*) (.*)/天下无双 \2 \1 /g'
天下无双 纵横天下 雄霸天下
  • 小技巧
# 过滤纯IP行,不要觉得没用,在处理日志时非常有用, -v 取反
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'

# 过滤网段, 同理 -v 取反
grep -E '192\.168\.213\.[0-9]{1,3}'    # 24位掩码
grep -E '192\.168\.[0-9]{1,3}.[0-9]{1,3}' #16位掩码   8位同理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值