.:  匹配任意单个字符
 []:匹配指定范围内的任意单个字符
 [^]:跟[]相反
 次数匹配(贪恋模式)
 *:匹配其前的字符0,1或多次。
 \?:配其前的字符0或1次
 \{m,n\}:
       至少m次\{m,\}
            至多n次\{0,n\}
            m次\{m\}
锚定符:
 r..t:匹配root,chroot,rooter,this is root          
 单词锚定:\b
 \<锚定词首:\<r..t,root,
 \>锚定词尾: root\>
 行首锚定:
 ^:^root
 $:root$
 可有可无的标点符号:root[[:punct:]]\{0,1\}$
 .*:任意长度的任意字符。
 
 分组字符:
   \(\) ,x\(ab\)*y,匹配是xaby
   前向引用:\1,就是\后面的第一个括号,\2,就是\后面的第二个括号。
grep:选项:
   -v:显示不被模式匹配的行;
   -i:不区分字符大小写
   -o:只显示匹配的串
   -A#:匹配行后面的#行
   —B#:匹配行前的#行
   -C#:匹配行前后的#行
   -E:
   ^$:表示空白行   /dev/null空白
特殊字符,元字符,不表示字符的表面意义,而是能匹配符号指证的字符串
          *:任意长度的任意字符:例如:a*b ,ab,
          ?:任意单个字符:a?b
          []:匹配指定范围内的任意单个字符:
          [[:space:]]=一个空白
          [[:alpha:]]=[a-zA-Z]
          [[:digit:]]=[0-9]
          [[:lower:]]=[a-z]
          [[:upper:]]=[A-Z]
          [[::]]=[]
          [^]:指定范围之外的任意单个字符;
          [^a-z]=[^[:lower:]]
练习:
1、显示/proc/meminfo文件中以不区分大小的s开头的行;
cat /proc/meminfo | grep -i '^s'
2、显示/etc/passwd中以nologin结尾的行;
grep 'nologin$' /etc/passwd
3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
# grep '^#[[:space:]]\{1,\}[^[:space:]]' /etc/inittab
4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
grep ':[0-9]:' /etc/inittab
5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
grep '^[[:space:]]\{1,\}'
6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
grep '^\([0-9]\).*\1' /etc/inittab
 
输入输出重定向  管道
 程序的默认输入设备,叫标准输入,stdin,键盘   用0 表示
 程序的默认输出设备,叫标准输入,stdout,minitor 用 1 表示
 程序的默认错误信息输出设备,叫标准错误输出,stderr,minitor, 用 2表示
 
 输出重定向:
 COMMAND > FILE,是覆盖输出的; set -C是阻止覆盖,set +C是开起覆盖 >|是强制的覆盖
 COMMAND >>FILE ,追加输出
 /dev/null,数据黑洞
/dev/zero,泡泡机
 /dev/random  /dev/urandom     随机数
 
输入重定向:
COMMAND <FILE
COMMAND << "EOF": Here document
 
 
错误输出:
COMMAND 2> FILE 2>> FILE追加错误
 正确或者错误统统重定向:
 COMMAND >FILE 2> &1; COMMAND &> FILE 这都是到一个文件中。