通配符与正则表达式

文件名通配


通配符:*?[][^]
  *:匹配任意长度任意字符,可以是零个
    ls ./.* 这个代码很有意思
  ?:匹配任意一个字符
  []:匹配指定范围内的任意单个字符
    [[:upper:]] 大写字母   [[:lower:]] 小写字母  [[:alpha:]] 字母  [[:digit:]] 数字
    [[:alnum:]] 字母和数字  [[:space:]] 空格    [[:punct:]] 标点符号和特殊字符
    [0-9]   a[abG]b   [a-z]   [a-Z]   最后两个除区间端点外不区分大小写    
  [^]:匹配指定范围以外的字符
    [^0-9]  [^[:digit:]]

[zyb@ZYB test_dir1]$ ls
a1b  a5b  a8b  aab  aAb  Aab  azb  aZb  bab  Bab  Gab  Yab  Zab
[zyb@ZYB test_dir1]$ ls a[1-4]b
a1b
[zyb@ZYB test_dir1]$ ls a[1-7]b
a1b  a5b
[zyb@ZYB test_dir1]$ ls a[0-9]b
a1b  a5b  a8b    
[zyb@ZYB test_dir1]$ ls [A-z]ab
Aab  bab  Bab  Gab  Yab
[zyb@ZYB test_dir1]$ ls [a-z]ab
aab  Aab  bab  Bab  Gab  Yab
[zyb@ZYB test_dir1]$ ls [a-Z]ab
aab  Aab  bab  Bab  Gab  Yab  Zab
[zyb@ZYB test_dir1]$ ls [a-g]ab
aab  Aab  bab  Bab
[zyb@ZYB test_dir1]$ ls [a-G]ab
aab  Aab  bab  Bab  Gab
[zyb@ZYB test_dir1]$ ls a[^1-4]b
a5b  a8b  aab  aAb  azb  aZb
[zyb@ZYB test_dir1]$ ls a[^a-z]b
a1b  a5b  a8b  aZb

正则表达式


正则表达式:是一类字符所书写出来的模式
元字符:类似通配符号,但并不表示字符本身,而是用于额外功能的描述
正则表达式分为基本正则表达式和扩展正则表达式
基本正则表达式:
  字符匹配:
    . 匹配任意单个字符
    [] 指定范围内任意单个字符
      [[:lower:]]  [[:upper:]]  [[:alpha:]]  [[:digit:]]  [[:alnum:]]
      [[:punct:]]  [:space:]  [0-9]  [a-Z]  [a-z]  [A-Z]
      注意:最后这两个与文件名通配不同,区分大小写
      [zyb@ZYB ~]$ grep -n "^[A-z]" test_file1 报错
    [^]:匹配指定范围以外的任意单个字符
  次数匹配:用来指定匹配其前面字符的次数
    * 任意次数,单独使用时不包括零次,若和其他组合使用时,则包括零次
      [zyb@ZYB ~]$ grep -n "a\(b\)*" test_file2 可以只匹配a
    .* 匹配任意长度的任意字符,空格制表符也能匹配
    \? 匹配前面字符出现0次或1次,贪婪模式
    \+ 匹配前面字符至少一次,
    \{m\} 匹配m次
    \{m,n\} 至少m次,至多n次
    \{m,\} 至少m次,逗号与反斜号之间不能有空格
    \{0,n\} 至多n次
  位置铆钉:
    ^ 锚定行首,^char
    $ 锚定行尾,char$
    ^$ 空白行,表示空行,不能有空格、制表符等其他任何字符
      ^hello$ 匹配只有hello组成的行,hello前后不能有空格、制表符其他任何字符
  单词的位置锚定:
    \<char 锚定词首,或者\bchar
    char\> 锚定词尾,或者char\b
  分组:
    \(\)
      \(ab\)*xy 匹配ab任意次
    \| 或者,ab|bc 表示ab或者bc
  引用:
    \1 后项引用,引用前面分组的第一个左括号及与之对应右括号中的模式所匹配到的内容
    \2 后项引用,引用前面分组的第二个左括号及与之对应右括号中的模式所匹配到的内容
    ...
      \(a.b\)xy\1a6bxya6b能匹配 a6bxya7b不能匹配
      1.He likes his lover.
      2.She loves her liker.
      3.He loves his lover.
      4.She likes her liker.
      \(l..e\).*\1r匹配到3、4
拓展正则表达式:
  字符匹配:
    . 任意单个字符
    [] 指定范围内任意单个字符,同上
    [^] 指定范围外任意单个字符
  次数匹配:
    * 匹配前面字符任意次,同上
    ? 匹配前面字符0次或1次
    + 匹配前面字符至少一次
    {m} 匹配m次
    {m,n} 匹配m至n次
    {m,} 至少m次,逗号与右花括号之间直接不能有空格
    {0,n} 至多n次
  锚定:
    ^ 行首
    $ 行尾
    \< \bchar 词首
    \> char\b 词尾
  分组:
    () 分组
    | 或者

posted @ 2018-03-30 10:18  张飘扬  阅读(4854)  评论(0编辑  收藏  举报