一、什么是正则表达式

字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。

   在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

二、正则表达式的三种文本处理工具、命令。

   I.grep

   1.gerp的常用参数

-n 只显示行号

  -o 只显示匹配的内容

  -q 静默模式,没有输出,需要使用$?来判断有没有过滤到自己想要的东西

  -l 如果匹配成功,则输出文件名称,如果失败则不输出,通常会-rl一起连用

  -A 如果匹配成功,会将匹配到的内容和后N行一起输出

  -B 如果匹配成功,会将匹配到的内容和前N行一起输出

  -C 如果匹配成功,会将匹配到的内容和前后N行一起输出

  -c 如果匹配成功,会将匹配内容的行数输出

  -E grep的扩张,相当于egrep

  -i 忽略大小写

  -v 取反,不匹配

  -w 匹配单词

 2.正则介绍

  ^ 行首

  $ 行尾

  . 除了换行符以外的单个字符

  * 前导字符的零个或多个

  .* 所有字符

  [] 字符组内的任一字符

  [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)

  ^[^] 非字符组内的字符开头行

  [a-z] 小写字母

  [A-Z] 大写字母

  [a-z] 小写和大写字母

  [0-9] 数字

  扩展正则 sed 加 -r 参数 或转义

  grep 加 -E 或 egrep 或转义

  AWK 直接支持 但不包含{n,m}

  ? 前导字符零个或一个

  + 前导字符一个或多个

  x{m} x出现m次

  x{m,}  x出现m至多次

  x{m,n} x出现m至n次

   II.sed

流编辑器 stream editer,是以行为单位的处理程序。

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

    1.命令格式

      sed [-nefri] ‘command’ 输入文本 

    2.常用选项

     -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才            会被列出来。
     -e∶直接在指令列模式上进行 sed 的动作编辑;
     -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
     -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
     -i∶直接修改读取的档案内容,而不是由萤幕输出。

   3.常用命令

     a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
     c 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
     d 删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
     i  插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
     p 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
     s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如   1,20s/old/new/g 就是啦

   III.awk

     awk是行处理器,依次对每一行进行处理,然后输出

    1.命令格式

     awk [options] 'commands' files

    2.常用选项

    -F 定义字段的分割符,默认的分隔符是连续的空格或制符表

    -v 定义变量并赋值 也可以借用次方式从shell变量中引入

    2.特殊要点

     $0 表示整个当前行

  $1 每行第一个字段

  NF 字段数量变量

  NR 每行的记录号,多文件记录递增

  FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始

  \t 制表符

  \n 换行符

  FS BEGIN时定义分隔符

  RS 输入的记录分隔符,默认为换行符(即文本是按一行一行输入)

  ~ 匹配,与==相比不是精确比较

  !~ 不匹配,不精确比较

  == 等于,必须全部相等,精确比较 

  != 不等于,精确比较

  && 逻辑与

  + 匹配时表示1个或者1个以上

  /[0-9][0-9]+/ 两个或两个以上数字

  /[0-9][0-9]*/ 一个或一个以上数字

  FILENAME 文件名

  OFS 输出字段分隔符,默认也是空格,可以改为制表符等

  ORS 输出的记录分隔符,默认为换行符,既处理结果也是一行一行输出

  -F '[:#/]' 定义三个分隔符

  print 是awk打印指定内容的主要命令