Linuxgrep命令用法以及正则表达式

本文发布时间: 2019-Mar-22
1.grep命令和正则表达式的简介(1).grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行;(2).正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能2.grep命令的基本语法格式grep [OPTION]... 'PATTERN' FILE...grep的常用选项:-v : 对匹配的行进行取反-o : 仅显示匹配到的内容-i : 忽略字符大小写-n : 为匹配的行加上行号-E : 使用扩展正则表达式 ,等同于egrep命令-F : 不使用正则表达式搜索,等同于fgrep命令-A # : 连同匹配行的下#行一并显示,#代表任意数字-B # : 连同匹配行的上#行一并显示,#代表任意数字-C # : 连同匹配行的上下#行一并显示,#代表任意数字--color=auto : 对匹配的内容以不同的颜色显示3.grep正则表达式的基本用法基本正则表达式:(1)字符匹配. : 匹配任意单个字符例:匹配以r开头,t结尾中间只隔了两个字符的行[] : 匹配指定集合中的任意单个字符常用的集合表示方法有:纯数字:[[:digit:]]或[0-9]小写字母:[[:lower:]]或[a-z]大写字母:[[:upper:]]或[A-Z]大小写字母:[[:alpha:]]或[a-zA-Z]数字加字母:[[:alnum:]]或[0-9a-zA-Z]空白字符:[[:space:]]标点符号:[[:punct:]]例1:匹配包含数字0或2的行(截图只包含前半部分)例2:匹配包含字母r或t的行(截图只包含前半部分)例3:匹配包含数字0-9的行(截图只包含前半部分)[^] : 匹配指定集合外的任意单个字符例:匹配包含除1-9范围之外的字符的行(截图只包含前半部分)(2)次数匹配* : 匹配其前面的字符出现任意次,0、1或多次的行例:创建一个测试文本,包含有以下内容:匹配x字母出现任意次的行:+ : 匹配其前面的字符出现1次或多次的行例:匹配x字至少1次的行? : 匹配其前面的字符出现0次或1次的行例:匹配x字母出现0次或1次的行{m} : 匹配其前面的字符出现m次的行例:匹配x字母出现2次的行{m,n} : 匹配其前面的字符至少出现m次,至多出现n次的行,m和n表示一个范围m-n例:匹配x字母至少出现1次,至多出现3次的行(3)位置锚定^ : 行首锚定例:匹配x字母出现在在行首的行$ : 行尾锚定例:匹配e字母出现在行尾的行^$ : 匹配空白行例:匹配空白的行< : 词首锚定例:精确匹配xy两个字母在一个单词的词首的行> : 词尾锚定例:精确匹配xy两个字母在一个单词的词尾的行<> : 匹配单词例:匹配包含xy这个单词的行(3)分组() : 对某字符串进行进行分组匹配例:匹配xy单启出现0次或1次的行后向引用:模式中,如果使用()实现了分组,在某行文本的检查中,如果()的模式匹配到了某内容,此内容后面的模式中可以被引用;对前面的分组进行引用的符号为: ,  ,模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;后向引用举例:新建一个文本文件,假设有如下内容:找出前后都有相同单词的行:正则表达式元字符总结:字符匹配:. ,[] ,[^]次数匹配:* ,? ,+ ,{m} ,{m,n}位置锚定:^ ,$ ,< ,> ,<>分组匹配:()4.egrep及扩展正则表达式:egrep相当于grep -E,egrep可以直接使用扩展正则表达式,而grep需要加上选项-E;扩展正则表达式的元字符:字符匹配:. ,[] ,[^]次数匹配:*,?,+,{m},{m,n},{m,},{0,n}位置锚定:^,$,>,<分组匹配:(),支持后向引用| : 匹配左侧或右侧符合条件的行,比如a|b,含有a或b的行都匹配;例1:egrep 等同于 grep -E例2:5.grep练习题:(1).显示/proc/meminfo文件中以大写或小写s开头的行;# grep -i '^s' /proc/meminfo(2).显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;# grep -v '/sbin/nologin$' /etc/passwd | cut -d: -f1(3).显示/etc/passwd文件中其默认shell为/bin/bash的用户进一步:仅显示上述结果中其ID号最大的用户# grep '/bin/bash$' /etc/passwd | cut -d: -f1 | sort -n -r | head -1(4).找出/etc/passwd文件中的一位数或两位数;# grep '<[[:digit:]]{1,2}>' /etc/passwd(5).显示/boot/grub/grub.conf中至少一个空白字符开头的行# grep '^[[:space:]]+.*' /boot/grub/grub.conf(6).显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;# grep '^#[[:space:]]+[^[:space:]]+' /etc/rc.d/rc.sysinit(7).找出netstat -tan命令执行结果中包含'LISTEN'的行;# netstat -tan | grep 'LISTEN[[:space:]]*$(8).添加用户bash,testbash,basher,nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认SHELL相同的用户;# grep '(<[[:alnum:]]+>).*$' /etc/passwd(9).扩展题:新建一个文本文件,假设有如下内容:He like his lover.He love his lover.He like his liker.He love his liker.找出其中最后一个单词是由此前某单词加r构成的行;# grep '(<[[:alpha:]]+>).*r' grep.txt(10).显示当前系统上root、centos或user1用户的默认shell及用户名;# grep -E '^(root|centos|user1>)' /etc/passwd(11).找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号'()"的行;# grep -o '<[[:alpha:]]+>()' /etc/rc.d/init.d/functions(12).使用echo输出一个路径,而使用egrep取出其基名;# echo /etc/rc.d/ | grep -o '[^/]+/?$' | grep -o '[^/]+'


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表