📜  grep中的正则表达式

📅  最后修改于: 2022-05-13 01:57:32.439000             🧑  作者: Mango

grep中的正则表达式

先决条件:grep

基本正则表达式

正则表达式提供了一种以非常灵活和简洁的方式匹配“文本字符串”的能力。 “文本字符串”可以进一步定义为单个字符、单词、句子或特定的字符模式。

就像 shell 的通配符将相似的文件名与单个表达式匹配一样,grep 使用不同类型的表达式来匹配一组相似的模式。

  • [ ] : 匹配一组字符的任何一个
  • [ ] with hyphen :匹配范围字符的任何一个
  • ^ : 后面的模式必须出现在每一行的开头
  • ^ 与 [ ] :模式不得包含指定集中的任何字符
  • $ :它前面的模式必须出现在每行的末尾
  • . (dot) : 匹配任意一个字符
  • \(反斜杠) :忽略其后字符的特殊含义
  • * : 前一个字符出现零次或多次
  • (点).* : 没有或任意数量的字符。

例子



(a) [ ] : 匹配一组字符的任何一个

  1. $grep  “New[abc]”  filename
    

    它将搜索模式指定为:

    Newa , Newb or Newc
    
  2. $grep  “[aA]g[ar][ar]wal”  filename
    

    它将搜索模式指定为

    Agarwal , Agaawal , Agrawal , Agrrwal
    
    agarwal , agaawal , agrawal , agrrwal
    


(b) 将 [ ] 与连字符一起使用
:匹配范围字符的任何一个

  1. $grep  “New[a-e]” filename
    

    它将搜索模式指定为

    Newa , Newb or Newc , Newd, Newe
    
  2. $grep  “New[0-9][a-z]”  filename
    

    它将搜索模式指定为:New 后跟一个数字,然后是一个字母表。

    New0d, New4f etc
    

(c) 使用 ^ :它后面的模式必须出现在每一行的开头

  1. $grep  “^san”  filename
    

    搜索以 san 开头的行。它将搜索模式指定为



    sanjeev ,sanjay, sanrit , sanchit , sandeep etc.
    
  2. $ls –l |grep  “^d” 
    

    仅显示目录列表

  3. $ls –l |grep  “^-” 
    

    仅显示常规文件列表

(d) 将 ^ 与 [ ] 一起使用:模式不得包含指定集中的任何字符

  1. $grep  “New[^a-c]”  filename
    

    它指定包含单词“New”后跟除 'a'、'b' 或 'c' 之外的任何字符的模式

  2. $grep  “^[^a-z A-Z]”  filename
    

    以非字母字符开头的搜索行

(e) 使用 $ :它前面的模式必须出现在每行的末尾

$ grep "vedik$" file.txt

(f) 使用。 (dot) : 匹配任意一个字符

$ grep "..vik" file.txt
$ grep "7..9$" file.txt

(g) 使用\(反斜杠) :忽略其后字符的特殊含义

  1. $ grep "New\.\[abc\]" file.txt

    它将搜索模式指定为 New.[abc]

  2. $ grep "S\.K\.Kumar" file.txt
    

    它将搜索模式指定为

    S.K.Kumar
    

(h) 使用 * :前一个字符出现零次或多次

$ grep "[aA]gg*[ar][ar]wal" file.txt


(i) 使用 (dot).*
:没有或任何数量的字符。

$ grep "S.*Kumar" file.txt