#!/bin/bash
#grep简介;
#Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。
#常用参数:
#-i :忽略大小写
#-c :打印匹配的行数
#-l :列出包含指定pattern的所有文件
#-v :查找不包含匹配项的行
#-n:打印包含匹配项的行和行标
#示例:
grep 'root' /etc/passwd #显示文件中包含root字符的行
grep -v 'root' /etc/passwd #显示不包含root的行
grep -i 'root' /etc/passwd #不区分大小写的匹配root字串,并显示
grep 'root' --color=auto /etc/passwd #高亮显示匹配到的字串 ;定义别名方便使用 alias grep='grep --color=auto' ;unalias grep 删除别名。在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效
grep -n 'root' /etc/passwd ##显示匹配到的行并显示所处的行号
grep -c 'root' /etc/passwd #显示匹配到的行数,不显示匹配到的内容
grep -r -l 'root' ./* ##显示在当前目录及其子目录下所有文件中包含root字符串的所有文件的名字。
grep -A3 'root' /etc/passwd #显示匹配到的行及其后边的三行
grep -B2 'root' /etc/passwd #显示匹配到的行及其前边的两行
grep -q 'root' /etc/passwd #匹配是否成功,不显示任何内容。查看结果echo $? 。
grep -w 'root' /etc/passwd #匹配单个完整词,多一个少一个字符都不行
#
#二.正则表达式简要介绍
#
#1.正则表达式的组成
#
#(1).一般字符:没有特殊意义的字符
#
#(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
#
#2.如下讲下正则表达式中的常见meta字符
#
#(1).POSIX BRE与ERE中都有的meta字符:
#
#\ : 通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
#
#. : 匹配任何单个字符(除NUL)
#
#* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
#
#^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
#
#$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
#
#[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
#\< : 锚定词首
#\> : 锚定词尾
#
#(2).POSIX BRE中才有的字符:
#
#\{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;
#
#\( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
#
#\n : 重复在\(与\)方括号内第n个子模式至此点的模式。
#
#(3).POSIX ERE中才有的字符:
#
#{n,m} : 与BRE的\{n,m\}功能相同
#
#+ : 匹配前面正则表达式的一个或多个扩展
#
#? : 匹配前面正则表达式的零个或一个扩展
#
#| : 匹配|符号前或后的正则表达式
#
#( ) : 匹配方括号括起来的正则表达式群
#
#(4). 方括号([])表达式
#
#4.1.字符集 [: :]
#
#标识字符集,有如下几种:
#[::alnum] : 数字字符 [:digit:] : 数字字符 [:punct:] : 标点符号字符
#[:alpha:] : 字母字符 [:graph:] : 非空格字符
#
# [:space:] : 空格字符
#[:blank:] : 空格与定位字符 [:lower:] : 小写字母字符 [:upper:] : 大写字母字符
#[:cntrl:] : 控制字符 [:print:] : 可显示的字符
#
#[:xdigit:] : 16进制数字
#[[:upper:]] [A-Z]
#[[:lower:]] [a-z]
#[[:digit:]] [0-9]
#[[:alnum:]] [0-9a-zA-Z]
#[[:space:]] 空格或tab
#[[:alpha:]] [a-zA-Z]
# 4.2.排序符号
#
#指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
#
#4.3.等价字符
#
#认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
#
#说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
#
#例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。
#
# [[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.
#
# 3.简单正规表达式匹配案例
#
#china : 匹配此行中任意位置有china字符的行
#
#^china : 匹配此以china开关的行
#
#china$ : 匹配以china结尾的行
#
#^china$ : 匹配仅有china五个字符的行
#
#[Cc]hina : 匹配含有China或china的行
#
#Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
#
#Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
#
#
#
#grep简介;
#Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。
#常用参数:
#-i :忽略大小写
#-c :打印匹配的行数
#-l :列出包含指定pattern的所有文件
#-v :查找不包含匹配项的行
#-n:打印包含匹配项的行和行标
#示例:
grep 'root' /etc/passwd #显示文件中包含root字符的行
grep -v 'root' /etc/passwd #显示不包含root的行
grep -i 'root' /etc/passwd #不区分大小写的匹配root字串,并显示
grep 'root' --color=auto /etc/passwd #高亮显示匹配到的字串 ;定义别名方便使用 alias grep='grep --color=auto' ;unalias grep 删除别名。在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效
grep -n 'root' /etc/passwd ##显示匹配到的行并显示所处的行号
grep -c 'root' /etc/passwd #显示匹配到的行数,不显示匹配到的内容
grep -r -l 'root' ./* ##显示在当前目录及其子目录下所有文件中包含root字符串的所有文件的名字。
grep -A3 'root' /etc/passwd #显示匹配到的行及其后边的三行
grep -B2 'root' /etc/passwd #显示匹配到的行及其前边的两行
grep -q 'root' /etc/passwd #匹配是否成功,不显示任何内容。查看结果echo $? 。
grep -w 'root' /etc/passwd #匹配单个完整词,多一个少一个字符都不行
#
#二.正则表达式简要介绍
#
#1.正则表达式的组成
#
#(1).一般字符:没有特殊意义的字符
#
#(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
#
#2.如下讲下正则表达式中的常见meta字符
#
#(1).POSIX BRE与ERE中都有的meta字符:
#
#\ : 通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
#
#. : 匹配任何单个字符(除NUL)
#
#* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
#
#^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
#
#$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
#
#[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
#\< : 锚定词首
#\> : 锚定词尾
#
#(2).POSIX BRE中才有的字符:
#
#\{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;
#
#\( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
#
#\n : 重复在\(与\)方括号内第n个子模式至此点的模式。
#
#(3).POSIX ERE中才有的字符:
#
#{n,m} : 与BRE的\{n,m\}功能相同
#
#+ : 匹配前面正则表达式的一个或多个扩展
#
#? : 匹配前面正则表达式的零个或一个扩展
#
#| : 匹配|符号前或后的正则表达式
#
#( ) : 匹配方括号括起来的正则表达式群
#
#(4). 方括号([])表达式
#
#4.1.字符集 [: :]
#
#标识字符集,有如下几种:
#[::alnum] : 数字字符 [:digit:] : 数字字符 [:punct:] : 标点符号字符
#[:alpha:] : 字母字符 [:graph:] : 非空格字符
#
# [:space:] : 空格字符
#[:blank:] : 空格与定位字符 [:lower:] : 小写字母字符 [:upper:] : 大写字母字符
#[:cntrl:] : 控制字符 [:print:] : 可显示的字符
#
#[:xdigit:] : 16进制数字
#[[:upper:]] [A-Z]
#[[:lower:]] [a-z]
#[[:digit:]] [0-9]
#[[:alnum:]] [0-9a-zA-Z]
#[[:space:]] 空格或tab
#[[:alpha:]] [a-zA-Z]
# 4.2.排序符号
#
#指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
#
#4.3.等价字符
#
#认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
#
#说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
#
#例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。
#
# [[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.
#
# 3.简单正规表达式匹配案例
#
#china : 匹配此行中任意位置有china字符的行
#
#^china : 匹配此以china开关的行
#
#china$ : 匹配以china结尾的行
#
#^china$ : 匹配仅有china五个字符的行
#
#[Cc]hina : 匹配含有China或china的行
#
#Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
#
#Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
#
#
#