设为首页 收藏本站
查看: 729|回复: 0

[经验分享] Linux grep命令用法以及正则表达式

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-8 12:45:52 | 显示全部楼层 |阅读模式
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结尾中间只隔了两个字符的行
    wKiom1SD2u7Q7Q9DAACG51du5uk180.jpg
[] : 匹配指定集合中的任意单个字符
常用的集合表示方法有:
        纯数字:[[:digit:]]或[0-9]
        小写字母:[[:lower:]]或[a-z]
        大写字母:[[:upper:]]或[A-Z]
        大小写字母:[[:alpha:]]或[a-zA-Z]
        数字加字母:[[:alnum:]]或[0-9a-zA-Z]
        空白字符:[[:space:]]
        标点符号:[[:punct:]]
    例1:匹配包含数字0或2的行(截图只包含前半部分)
    wKiom1SD2u_Rjow2AAECwNM6lCU413.jpg
    例2:匹配包含字母r或t的行(截图只包含前半部分)
    wKiom1SD2u-hR7IlAAEH75SRni8219.jpg
    例3:匹配包含数字0-9的行(截图只包含前半部分)
    wKiom1SD2vDzdtJ5AAEhurUIkIE767.jpg
[^] : 匹配指定集合外的任意单个字符
    例:匹配包含除1-9范围之外的字符的行(截图只包含前半部分)
    wKiom1SD2vCgXPy1AAEEprykkRE997.jpg
(2)次数匹配
* : 匹配其前面的字符出现任意次,0、1或多次的行
    例:创建一个测试文本,包含有以下内容:
    wKioL1SD24OwL7cIAACUZaPqjNg452.jpg
    匹配x字母出现任意次的行:
    wKioL1SD24PTMZk1AACM7mtYHEM823.jpg
+ : 匹配其前面的字符出现1次或多次的行
    例:匹配x字至少1次的行
    wKioL1SD24STuaSDAACH6UYkBVk410.jpg
? : 匹配其前面的字符出现0次或1次的行
    例:匹配x字母出现0次或1次的行
    wKiom1SD2vLi9kCAAACX7uxl-tU789.jpg
{m} : 匹配其前面的字符出现m次的行
    例:匹配x字母出现2次的行
    wKiom1SD2vLQs46-AABRMA1lem4477.jpg
{m,n} : 匹配其前面的字符至少出现m次,至多出现n次的行,m和n表示一个范围m-n
    例:匹配x字母至少出现1次,至多出现3次的行
    wKioL1SD24WwdMrkAACGZs5m18Y344.jpg
(3)位置锚定
^ : 行首锚定
    例:匹配x字母出现在在行首的行
    wKioL1SD24XCQVQrAAB_RVr25cg947.jpg
$ : 行尾锚定
    例:匹配e字母出现在行尾的行
    wKioL1SD24aSggjRAACFGRJuZwM036.jpg
^$ : 匹配空白行
    例:匹配空白的行
    wKiom1SD2vSDKET_AAA2intMjhs842.jpg
< : 词首锚定
    例:精确匹配xy两个字母在一个单词的词首的行
    wKiom1SD2vXRfwy5AADQixv2p64649.jpg
> : 词尾锚定
    例:精确匹配xy两个字母在一个单词的词尾的行
    wKioL1SD24eiF9iCAACDKbPHbh0356.jpg
<> : 匹配单词
    例:匹配包含xy这个单词的行
    wKiom1SD2vaiP8LLAADZSwZn_x8405.jpg
(3)分组
() : 对某字符串进行进行分组匹配
    例:匹配xy单启出现0次或1次的行
    wKiom1SD2vaRyIiAAACSuhXdc6I584.jpg
后向引用:模式中,如果使用()实现了分组,在某行文本的检查中,如果()的模式匹配到了某内容,此内容后面的模式中可以被引用;
对前面的分组进行引用的符号为: ,  ,
模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;
后向引用举例:
    新建一个文本文件,假设有如下内容:
    wKioL1SD24igOXo4AABd3nRsWF0288.jpg
    找出前后都有相同单词的行:
    wKiom1SD2vfQzs2BAABkw_Vv-F0659.jpg
正则表达式元字符总结:
    字符匹配:. ,[] ,[^]
    次数匹配:* ,? ,+ ,{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
    wKiom1SD2vfgW1FQAAC35ZGoezY298.jpg
    例2:
    wKiom1SD2vijhAJOAABrBWYINj0018.jpg
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 '[^/]+'

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-37578-1-1.html 上篇帖子: CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛 下篇帖子: Linux目录、文件的创建与删除 表达式 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表