通配符與正則表達式


文件名通配


通配符:*?[][^]
  *:匹配任意長度任意字符,可以是零個
    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 詞尾
  分組:
    () 分組
    | 或者


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM