grep中的正则表达式
先决条件:grep
基本正则表达式
正则表达式提供了一种以非常灵活和简洁的方式匹配“文本字符串”的能力。 “文本字符串”可以进一步定义为单个字符、单词、句子或特定的字符模式。
就像 shell 的通配符将相似的文件名与单个表达式匹配一样,grep 使用不同类型的表达式来匹配一组相似的模式。
- [ ] : 匹配一组字符的任何一个
- [ ] with hyphen :匹配范围字符的任何一个
- ^ : 后面的模式必须出现在每一行的开头
- ^ 与 [ ] :模式不得包含指定集中的任何字符
- $ :它前面的模式必须出现在每行的末尾
- . (dot) : 匹配任意一个字符
- \(反斜杠) :忽略其后字符的特殊含义
- * : 前一个字符出现零次或多次
- (点).* : 没有或任意数量的字符。
例子
(a) [ ] : 匹配一组字符的任何一个
$grep “New[abc]” filename
它将搜索模式指定为:
Newa , Newb or Newc
$grep “[aA]g[ar][ar]wal” filename
它将搜索模式指定为
Agarwal , Agaawal , Agrawal , Agrrwal agarwal , agaawal , agrawal , agrrwal
(b) 将 [ ] 与连字符一起使用:匹配范围字符的任何一个
$grep “New[a-e]” filename
它将搜索模式指定为
Newa , Newb or Newc , Newd, Newe
$grep “New[0-9][a-z]” filename
它将搜索模式指定为:New 后跟一个数字,然后是一个字母表。
New0d, New4f etc
(c) 使用 ^ :它后面的模式必须出现在每一行的开头
$grep “^san” filename
搜索以 san 开头的行。它将搜索模式指定为
sanjeev ,sanjay, sanrit , sanchit , sandeep etc.
$ls –l |grep “^d”
仅显示目录列表
$ls –l |grep “^-”
仅显示常规文件列表
(d) 将 ^ 与 [ ] 一起使用:模式不得包含指定集中的任何字符
$grep “New[^a-c]” filename
它指定包含单词“New”后跟除 'a'、'b' 或 'c' 之外的任何字符的模式
$grep “^[^a-z A-Z]” filename
以非字母字符开头的搜索行
(e) 使用 $ :它前面的模式必须出现在每行的末尾
$ grep "vedik$" file.txt
(f) 使用。 (dot) : 匹配任意一个字符
$ grep "..vik" file.txt
$ grep "7..9$" file.txt
(g) 使用\(反斜杠) :忽略其后字符的特殊含义
$ grep "New\.\[abc\]" file.txt
它将搜索模式指定为 New.[abc]
$ 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