grep文本过滤工具

UNIX中用于文本搜索的大师级工具,通过它可以快速的找到某文件你所需要的字符。 作用:根据用户指定的“模式”对目标文件逐行进行匹配检查,然后打印出匹配到的行。 模式:由正则表达式的元字符及文本字符所编写出来的过滤条件!默认是出于贪婪模式下,意思是只要满足条件,则匹配到尾部! 以下是基础使用方法: 使用一个小文件做演示,先cat一下原文件内容


以下是常用选项,并不是全部 ** -i**:匹配时忽略大小写 ** -o**:只显示匹配的内容,并分行显示 ** -v**:匹配相反的内容 ** -c**:统计文件或文本中包含匹配字符串的行数 -q:静默模式,不显示内容,可以通过echo $?查看命令状态返回值查看是否成功,脚本中可用到这个选项。

-E:支持扩展正则表达式 ** -A**:匹配到指定行之外,还可以指定其相邻的之后N行(N取值自己定义) ** -B**:匹配到指定行之外,还可以指定其相邻的之前N行(N取值自己定义) -C:匹配到指定行之外,还可以指定其相邻的之前和之后各N行(N取值自己定义) .


. 基本正则表达式,(支持grep结合使用) 小文件做演示,先cat一下源文件 ** :匹配其前面的字符任意次* ** .:匹配任意字符单次** \?:匹配其前面的字符0次或1次 ** [ ]:匹配指定范围内的字符** [^]:取反,匹配指定范围外的字符 ** \{m,n\}:匹配其前面的字符至少m次之多n次** \(ad\):分组,将括号内匹配到的字符串保存至正则表达式内部的变量中,其实和我们平常定义变量一样的意思,这里只不过是将匹配到的字符串保存到了变量中,这些变量就是**\1、\2、\3等等 这些变量又称为后向引用**,就是将分组内的字符串再次利用,就像平时的本地变量一样,变量值定义了除非手动改,是不是变化的,分组括号内的字符串也是,匹配到的是什么后面引用的一定和括号内匹配到的字符串是相同的 例如: 这个例子的意思是我们匹配到的用户名和他的默认shell必须是同名的,这里的括号就是先匹配到每个用户的用户名,然后通过\1$来引用,因为括号内的字符串保留在了变量中例如sync用户,那么我们后边引用的时候肯定引用的字符串也是sync, 前面匹配到什么,后面引用的就是相同的字符串。 下面例子也是先看一下源文件内容,再看匹配到的是什么 .


. 扩展正则表达式(支持egrep结合使用或者grep -E选项) 扩展正则表达式的元字符与基本正则表达式大部分相同,只有个别差异,好处就是不用像基本正则表达式那样使用 \ 来转义。 ***** :匹配其前面的字符任意次 ** .** :匹配任意字符单次 :匹配其前面的字符0次或1次 ** [ ]** :匹配指定范围内的字符 ** [^]** :取反,匹配指定范围外的字符 ** +** :匹配其前面字符至少一次 ** {m,n}:匹配其前面字符至少m次之多n次,扩展正则表达式不需要用\来转义 ():分组,后向引用。\1、\2、\3…… ** |:或,a|b,a或者b 匹配Cat、cat 正则表达式很难,难得不在你记不住每个元字符的意思,而是在将他们拼凑起来完成某一件事,这件事上需要花功夫才能完成!不是一朝一夕的!首先入门最重要。 我在额外的写几个我当时掉头发的题: 1.echo /etc/sysconfig/,用grep或egrep匹配其基名 2.echo /etc/sysconfig/,用grep或egrep匹配其路径名 3.找出ifconfig ens33的IP地址 希望有所帮助!!!