1. 正则表达式定义: 
  2.      正则表达式(Regular EXPression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串做替换或者从某个传串中取出来符合某个条件的子串等。 
  3.      正则表达式是由普通字符(如:a-z)以及特殊字符(称为元字符)组成的文字模式,正则表达式作为一个模板。将某个字符式与所搜索的字符串进行匹配。 
  4.  
  5. 正则表达式:简称REGEXP 
  6.      基本正则表达式(Basic REGEXP) 
  7.      扩展正则表达式(Extended REGEXP) 
  8.       
  9. 基本正则表达式: 
  10.    文本查找的需要: 
  11.          grep:根据模式搜索文本,并将符合模式的文本行显示出来 
  12.          Pattern:文本字符和正则表达式的元字符组合而成的比配条件 
  13. grep: 是用基本的正则表达式定义模式来过滤文本       例如: alias grep='grep --color'  
  14.             -i:忽略字符大小写的差别。 
  15.             --color 
  16.             -v:显示没有被模式匹配到的行 
  17.             -O:只显示被模式匹配到的字符串 
  18.             -E:使用扩展的正则表达式 
  19.             -A(数字):后面两行。                例子:grep -A 2 'core id ' /proc/cpuinfo 
  20.             -B:前面两行 
  21.             -C:前后各两行 
  22.              
  23.   .(点)表示任意单个字符 
  24.   []:匹配指定范围内的任意单个字符 
  25.   [^]:匹配指定范围外的任意单个字符 
  26. 字符集合: 
  27.   [[:space:]]所有的空格字符 
  28.   [:punct:]:标点符号 
  29.   [:lower:]小写字母 
  30.   [:upper:]大写字母 
  31.   [:alpha:]大小写字母 
  32.   [:digit:]数字 
  33.   [:alnum:]数字和大小写字母 
  34.   [^]:匹配指定范围之外的任意单个字符。 
  35. 匹配次数(贪婪模式); 
  36.   *匹配其前面的字符任意次 
  37.   .*:任意长度的任意字符。 
  38.   \?:匹配其前面的字符1次或0次 
  39.   \{m,n\}:匹配其前面的 字符至少m次,至多n次。     例如:\{1,\} :最少一次        \{,3\}:最多三次 
  40.          例如:a,b,ab,aab,acb,adb,amnb     
  41.          1、与其a*b 匹配的是前四个。 
  42.          2、匹配a.*b  的是ab之间的任意都行。 
  43.          3、匹配a?b的只要找到含有b的就可以(除了a都行) 
  44.  
  45. 位置: 
  46. ^:锚定行首,次字符后面的任意内容必须出现在行首 
  47. $:锚定行尾,次字符前面的任意内容必须出现在行尾 
  48. ^$:空白行 
  49. \<或\b:锚定词首,其后面的任意字符必须作为单词首部出现 
  50. \>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现 
  51.       例子:egrep --color '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>' ai 找到 ai文件中1-255之间的数字 
  52.  
  53. 分组: 
  54. \(\):把内容分组 例如:\(ab\)*表示ab可出现0次或者多次          
  55.      \1:第一个左括号以及与之对应的右括号所包含的的所有内容  
  56.                   例子:grep '\([0-9]\).*\1$' /etc/inittab 
  57.      \2:第二个左括号以及与之对应的右括号所包含的的所有内容 
  58.      \3:第三个左括号以及与之对应的右括号所包含的的所有内容 
  59.       
  60.       
  61. 扩展正则表达式:             grep -E=egrep 
  62.  *:其前字符任意次 
  63.  ?:没有\) 
  64.  +:匹配其前面的字符至少1次  
  65.   
  66. 位置锚定(^、$、\<、\>、分组\(\)与基本正则表达式一样)  
  67. |:或  例如:C | cat 意思是C或cat  ,(C |c)at 表示Cat或cat 
  68. \. :是表示.本身的意义        
  69.    
  70. grep练习题: 
  71.      1、显示/proc/meminfo文件中以不区分大小的s开头的行; 
  72.         grep -i '^s' /proc/meminfo 
  73.          
  74.      2、显示/etc/passwd中以nologin结尾的行;  
  75.         grep 'nologin$' /etc/passwd 
  76.          
  77.      3、取出默认shell为、sbin/nologin 的用户列表 
  78.         grep "nologin$" /etc/passwd | cut -d : -f1  
  79.          
  80.      3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行; 
  81.         grep -n '^#[[:space:]]\{1,\}[^[:space:]]' /etc/inittab 
  82.       
  83.      4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行; 
  84.         grep ':[0-9]:' /etc/inittab 
  85.       
  86.      5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行; 
  87.         grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf 
  88.       
  89.      6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行; 
  90.         grep '^\([0-9]\).*\1$' /etc/inittab 
  91.          
  92.      7、找出某文件中的,1位数,或2位数; 
  93.         grep '\<[0-9]\{1,2\}\>' b 
  94.          
  95.      8、查找ifconfig 中的ABC三类的ip地址 
  96.         ifconfig | egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>
  97.      9、分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式: 
  98.            l1:1:wait:/etc/rc.d/rc 1 
  99.            l3:3:wait:/etc/rc.d/rc 3 
  100.         grep '^l\([0-9]\):\1.*\1' /etc/inittab 
  101.         grep '^l\([0-9]\):\1:wait:/etc/rc.d/rc \1' /etc/inittab