huiselele 发表于 2018-8-28 11:56:43

Shell 正则表达式 基础

  一、linux文本查找命令
  三个基本常用的命令
  1、grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本
  2、egrep:扩展式grep,其使用扩展式正则表达式(ERE)来匹配文本
  3、fgrep:快速grep,这个版本匹配固定字符串而非正则表达式。
  二、grep的基本语法
  GREP pattern-spec
  用途:匹配一个或多个模式的文本行
  options:
  -E:使用扩展正则表达式进行匹配
  -i:忽略大小写
  --color 加以颜色可以添加别名
  laias gerp ='grep --color'
  -v:反向显示,没有被模式匹配到的行
  -o:只显示被模式匹配到的字符串
  -A(后面加数字):找到行显示行后面的n行

  grep -A 2 '^core>  -B(后面加数字):找到行显示前面的n行

  grep -B 2 '^core>  -C(后面加数字):找到行的前后n行

  grep -C 2 '^core>  三、简单介绍
  组成部分:一般字符:没有特殊意义的字符
  特殊字符:也称meta字符,元字符,在正则表达式中有特殊的意义
  常见的元字符:
  \ :通常用于打开或者关闭后续字符的特殊含义,如\(…\)与\{…\}
  . :匹配任意单个字符(除NUL)
  *:   匹配前面的字符任意次
  .* :任意长度的任意字符例如:a.*b:以字母a开头
  [] :匹配指定范围内任意单个字符
  [^] :匹配指定范围外的任意字符
  \? :匹配前面的字符0次或者1次
  \{…\} :匹配前面的字符1次或者0次
  例如:   \{0,1\}匹配一次
  grep 'a\{2,3\}' aa.txt
  grep 'a.\{2,3\}' aa.txt
  egrep:
  + : 匹配前面的正则表达式1个或者多个扩张
  | :匹配|前或者后的正则表达式
  ( ):匹配方刮号起来的正则表达式群   ([])
  位置锚定:
  ^ :锚定行首,此字符后面的任意内容必须出现在行首
  $:锚定行尾,此字符前面的任意字符必须出现在行尾
  ^$:空白行
  \:其前面的任意字符必须作为单词的尾部出现
  \
  实例:    grep '\' aa.ttx   grep '\' aa.ttx
  分组:\(\)
  \(ab\)*   匹配ab
  向后引用
  \1:引用第一个左刮号以及与之对应的右刮号内的所有内容
  \2:引用第二个左刮号以及与之对应的右刮号内的所有内容
  \3:引用第三个左刮号以及与之对应的右刮号内的所有内容
  \4:引用第四个左刮号以及与之对应的右刮号内的所有内容
  实例:grep '\().*\1$' aa.txt
  四、grep\egrep\fgrep 之间的关系
  grep:在没有参数的情况下,只输出符合RE字符串之句子,常见的参数在“一”中
  egrep:为grep的扩充版,改良了许多传统的grep不能或者不便的操作;such as:
  --- grep 之下不支持?与+这两种字符,但是egerp可以得
  --- grep不支持a|b 或则 (abc | xyz) 这类“或一”比对,但是egerp可以
  --- grep 在处理{n,m}时,需要{与}处理,但egrep不需要
  五、字符集
  [:alnum:]数字字符    [:digit:]数字字符[:punct:]标点符合字符   [:alpha:]   字母字符
  [:graph:]   非空字符    [:space:] 空格字符[:blank:]   空格与定位字符[:lower:]小写字母
  [:upper:]   大写字符   [:cntrl:]控制字符   [:print:]可显示的字符    [:xdigit:] 16进制数字
  六、实例
  1、 grep 'h.\{0,4\}p$' a:匹配a文件中任意字符至少0次之多4次
  2、 grep 'h.\{1\}p$' a   :匹配a文件中任意字符1次
  3、 grep 'h.\{1,\}p$' a:匹配a文件中任意字符至少1次
  4、grep -o -E'{1,3}\.{1,3}\.{1,3}\.{1,3}' grub.cfg搜索IP地址
  5、 grep--color -E'C|cat' a.txt
  6、 ls|grep '[[^[:space:]]*'   显示以数字结尾但是不包含空白的文件。
  7、关于grep和egrep
  如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
  www.baidu.com
  http://www.baidu.com
  https://www.baidu.com
  http://wwwbaiducom
  baidu.com
  baidu
  匹配以http或者https开头,并且其后为:并且含有.的串
  BRE匹配:
  grep '^https\{0,1\}.*\..*' url.txt
  ERE匹配:
  grep -E '^https?.*\..*' url.txt
  匹配结果如下:
  http://www.baidu.com
  https://www.baidu.com

页: [1]
查看完整版本: Shell 正则表达式 基础