您的位置:首页 > 其它

grep&&egrep

2014-03-03 23:44 127 查看
grep家族简介grep家族由命令grep、egrep和fgrep组成。grep命令在文件中全局查找指定的正则表达式,并且打印所有包含该表达式的行。Egrep和fgrep都只是grep的变体。Egrep命令是扩展的grep,支持更多的正则表达式元字符。fgrep命令被称为固定grep(fixedgrep),有时也被称作快速grep(fast grep),它按字面解释所有的字符,也就是说,正则表达式元字符不会被特殊处理,它们只匹配自己。自由软件基金会提供了grep的免费版本,称作GNU grep。Linux系统上使用的就是这种版本的grep。1)grep(1)grep (global search regular expression(RE)and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出
(2)grep的工作方式:它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用(双引号或者单引号),模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容命令格式grep word filename filename范例1grep tom /etc/passwd 说明:grep将在文件/etc/passwd 中查找模式tom。如果查找成功,文件的相应行会显示在屏幕中,如果没有找到指定的模式,就不会有任何输出,如果所指定的文件不是一个合法文件,屏幕上会显示报错信息。如果发现要了查找的模式,grep返回的退出状态为0,表示成功,如果没找到,返回的退出状态就是1,而找不到指定的文件时,退出状态将是2. grep程序的输入可以来自标准输入或管道,而不仅仅是文件。如果忘了指定文件,grep会以为你要它从标准输入(即键盘)获取输入,于是停下来等着你键入一些字符。如果输入来自管道,就会有另一条命令的输出通过管道编程grep命令的输入,如果匹配到要查找的模式,grep就会把输出打印在屏幕上。范例2ps –ef | grep root说明Ps命令的输出(ps –ef显示正在系统上运行的所有进程)被送到grep,然后包含root的行被打印在屏幕上。1.1)元字符 元字符也是一种字符,但它表达的含义不同于字符本身的字面含义。例如,^和$就是元字符。grep命令支持很多正在表达式元字符,以使用户更精确地定义要查找的模式。它提供了很多命令选项用于调整执行查找或显示结果的方式。例如,可以通过指定选项来关闭大小写敏感、要求显示行号,或者只显示报错信息等。范例grep –n ‘^jack:’/etc/passwd说明grep在文件/etc/passwd中查找jack,如果jack出现在某行的行首,grep就打印出改行的行号和内容。grep使用的正则表达式元字符^:锚定行首的符合条件的内容,用法格式“^pattern”;$: 锚定行尾的符合条件的内容,用法格式“pattern$”;^pattern$: ^$: 空白行.: 匹配任意单个字符*:匹配紧挨在其前面的字符任意次; a*b: ab, aab, acb, b.*: 匹配任意长度的任意字符[]:匹配指定范围内的任意单个字符[^]:匹配指定范围外的任意单个字符 [a-z], [A-Z], [0-9] [:lower:] a-z [:upper:] [:digit:] [:alpha:] [:alnum:] [:space:] [:punct:]grep "r[0-9].*h" /etc/passwd\?: 匹配紧挨在其前面的字符0次或1次; a\?b: ab, aab, acb, b\{m,n\}: 匹配其前面的字符至少m次,至多n次; \{0,n\}: 至多n次;0-n次; \{m,\}:至少m次 \{m\}: 精确匹配m次; a\{1,3\}b: b, ab, aab,aaab, aaaaaab, acb grep"[bB].\{2,5\}[tT]": Boot, B123T, bxy12T \<: 锚定词首,用法格式:\<pattern \b: \bpattern \>: 锚定词尾,用法格式:pattern\> \b: pattern\b \<pattern\>:锚定单词 \(\): 分组,用法格式: \(pattern\) \(ab\)\{1,3\}: ab, aab,abb, abab, ababab, ab任意字符ab:ab.*ab a.b任意字符a.b: \(a.b\).*\11.2)grep的选项--color=auto exportGREP_COLOR='01;36' -v:反向选取,只显示不符合模式的行; -o:只显示被模式匹配到的字串,而不是整个行; -i:不区分字符大小写; -A#:显示匹配到的行时,顺带显示其后面的#个行; -A2 -B#:前面的#行; -C#:前后的#行;-E: 使用扩展的正则表达式 grep-E = egrep1.3)使用正则表达式实例1、显示/proc/meminfo文件中以不区分大小写的s开头的行# grep "^[Ss]" /proc/meminfo2、显示/etc/passwd中以nologin结尾的行;# grep "/sbin/nologin$"/etc/passwd 取出默认shell为/sbin/nologin的用户列表
# grep "/sbin/nologin$"/etc/passwd |awk -F: '{ print $1 }'
取出默认shell为bash,且其用户ID号最小的用户的用户名 #grep "/bin/bash$" /etc/passwd | sort -n -t: -k3 | head -1 | cut -d:-f1
3、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;# grep"^#[[:space:]]\{1,\}[^[:space:]]" /etc/rc.d/rc.sysinit4、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n;# grep ".n.*.n"/etc/rc.d/rc.sysinit5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;# grep"^[[:space:]]\{1,\}" /boot/grub/grub.conf2) egrep 使用egrep的主要好处是它在grep提供的正则表达式元字符集的基础上增加了更多的元字符。(linux系统,egrep=grep –E)2.1) egrep使用的正则表达式元字符 ^ :行首定位符 $:行尾定位符 .:匹配一个字符 *:匹配零个或多个前导字符[]:匹配一组字符中的任意一个[^]:匹配不在指定字符组内的字符egrep 新增的元字符 +:匹配一个或多个加号前的字符?:匹配零个或一个前导字符a|b:匹配a或b():字符组2.2)egrep和grep –E实例 1.打印包含表达式NW或EA的行; # egrep 'NW|EA' datafile或# grep -E 'NW|EA' datafile2.打印所有包含一个或多个3的行 # egrep '3+' datafile3.打印所有一个2,后跟0个或1个句点,再接1个0~9之间的数的行 # egrep '2\.?[0-9]' datafil 4.打印包含一个或多个模式组no的行# egrep '(no)+' datafile 5.打印所有包含一个或多个字母数字词字符(\w+),后跟一个或多个非字母数字词字符(\W+),再接上集合ABC中一个字母的行。# egrep'\w+\W+[ABC]' datafile6.打印所有包含Sh或u的行 # egrep 'Sh|u' datafile
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: