grep及正则表达式
来源:互联网 发布:淘宝出售虚拟物品 编辑:程序博客网 时间:2024/06/06 18:26
grep及正则表达式
grep – 分枝什么是grep
grep 全名是 Global search Regular expression and Print out the line – 全局搜索正则表达式并打印到当前行,那不难看出来grep就是一个作用在正则表达式上的搜索工具了,那么怎么实用grep呢,下面我们来做下简介
- grep 分为三类分枝
grep [OPTIONS] PATTERN [FILE…]; 模式(pattern): 由正则表达式字符及文本字符所编写的过滤条件
–color=auto 长选项,给匹配到的模式着色。(CentOS 7 的
别名自带)
-v : 显赤不被模式匹配到的行
-o : 仅显示匹配到的字符串本身
-q : 静默模式,不输出任何信息
-A # : 显示所匹配到的后#行
-B # : 显示所匹配到的前#行
-C # : 显示所匹配到的前后各#行等等... *常用帮助请参考man文档
什么是正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
- 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
- 可以通过正则表达式,从字符串中获取我们想要的特定部分。
即说到了匹配,那我们接下来说下正则的元定符
基本正则的元字符-
字符匹配: .: 匹配任意的单个字符 []: 匹配指定范围内的任意单个字符 [^]: 匹配指定范围外的任意单个字符匹配次数: *: 匹配前面的字符任意次(包括0次) \?: 匹配前面的字符0次或1次 \+: 匹配前面的字符至少1次 \{m\}: 匹配前面的字符m次 \{m,n\}: 匹配前面的字符至少m至n次 \{,m\}: 匹配前面的字符至多m次位置锚定: \<: 锚定词首,也可以用\b表示 \>: 锚定词尾,也可以用\b表示 ^ : 行首锚定 ^ : 行尾锚定 ^$ : 空行 分组: \(\): 将一个或多个字符捆绑一起当一个整体引用
以上信息我们做几个示例来看看
字符匹配 例: 参照f2文件 [root@localhost ~]# cat f2 <-当前f2文件用cat查看有以下这些内容 a ab ba aa abc cba cbabc. 匹配任意单个字符 [root@localhost ~]# grep "a." f2 <-grep查找a后面跟着个任意单个字符的行 ab aa abc cbabc **查找到的四行内容均符合所查询的条件[]-匹配指定范围内的任意单个字符 [root@localhost ~]# grep "a[a-z]" f2 <- grep查找当前a后面a-z的任意单个字母 ab aa abc cbabc **[a-z]是指定范围a-z内任意的单个字母,在正则中字母的指定不以ASCII码来匹配[^]: 匹配指定范围外的任意单个字符 [root@localhost ~]# grep "[^ab]" f2 <- grep查找非a或b的任意字符 abc cba cbabc **匹配到的行内包括a,b的行都排除了,只有这三行中存在所查询的条件
次数匹配
例: 参照f2文件 (内有改动) [root@localhost ~]# cat f2 <- 有个空格 a ab abc aab abb aabbcc aaaaabbbcc*: 匹配前面的字符任意次(包括0次) [root@localhost ~]# grep "a*" f2 <- grep查找当前a出现任意次的行 <- 空格也匹配到了 a ab abc aab abb aabbcc aaaaabbbcc **匹配到的行内有空格出现那么就表示即使匹配到的a是0次也算\?: 匹配前面的字符0次或1次 [root@localhost ~]# grep 'ab\?' f2 <- grep查找当前ab匹配到的行 b出现0次或1次 a ab abc aab abb aabbcc aaaaabbbcc **出现的行中有a那证明b可有可无,即0次或1次\+: 匹配前面的字符至少1次 [root@localhost ~]# grep "b\+" f2 <- grep查找b出现在f2中至少一次的行 ab abc aab abb aabbcc aaaaabbbcc **出现最少一次那a没匹配出来就是最好的对比\{m\}: 匹配前面的字符m次 [root@localhost ~]# grep "a\{1\}b" f2 <-grep查找当前行,a出现1次后面接b的行 ab abc aab abb aabbcc aaaaabbbcc **明确指定数值\{m,n\}: 匹配前面的字符至少m至n次 [root@localhost ~]# grep "a\{2,3\}b" f2 <-grep查找当前行,a出现2-3次后面接b的行 aab aabbcc aaaaabbbcc **指定的是一个范围,范围内所匹配到的都是带有2或3个a的。\{,m\}: 匹配前面的字符至多m次 **这种格式不用做例子也能看出来,指定M是多少就是说从0-m次
位置锚定
\<: 锚定词首,也可以用\b表示 以上图为搜索文档 [root@localhost ~]# grep "\<root" /etc/passwd root:$6$OVorHBGEwUXX/g0y$bibxqzr48k8TJfCu3iH5q647eJK/V0PbF6SdR84YRRvDqGAw.rvE25ln8srHkuOoxK8fyrSyi/LinbL5MYoDY/:0:0:root:/root:/bin/bash operator:*:11:0:operator:/root:/sbin/nologin [root@localhost ~]# grep "\broot" /etc/passwd root:$6$OVorHBGEwUXX/g0y$bibxqzr48k8TJfCu3iH5q647eJK/V0PbF6SdR84YRRvDqGAw.rvE25ln8srHkuOoxK8fyrSyi/LinbL5MYoDY/:0:0:root:/root:/bin/bash operator:*:11:0:operator:/root:/sbin/nologin 上面命令是搜索以root为词首的行,其中包含root为词首的行有两行\>: 锚定词尾,也可以用\b表示 [root@localhost ~]# grep "\<zhan\>" /etc/passwd zhan:$6$eMFgn5mA4ns/rV0D$jW/KYz1v7bE8j19ud9w4qyKEbLBVyKrJ8whJwyMPGbr1RpA.g0q00nMCDtcV4yVKq8Qk/vyC22S/0LOxlfTgB1:1002:1002:zhang:/home/zhan:/bin/bash [root@localhost ~]# grep "\<zhan" /etc/passwd zhang:$6$zZqpuWCkSO.eY1Rq$M1Y9T3L3ruvhgBpK91stttRuGuBbZnlkl84gUp4lkWt80MYxAy5y7zhuaavq14sWHaqEm9e7M.OIaJpEZjq/n1:1000:1000:zhang:/home/zhang:/bin/bash zhan:$6$eMFgn5mA4ns/rV0D$jW/KYz1v7bE8j19ud9w4qyKEbLBVyKrJ8whJwyMPGbr1RpA.g0q00nMCDtcV4yVKq8Qk/vyC22S/0LOxlfTgB1:1002:1002:zhang:/home/zhan:/bin/bash 命令中如果不带锚定行尾也许我们搜出来的就有可能不是很精确,所以在有明确的搜索条件一定要明确搜索,词尾的\b我就不演示了,意义与\>一样^ : 行首锚定 [root@localhost ~]# grep "^zh.*" /etc/passwd zhang:$6$zZqpuWCkSO.eY1Rq$M1Y9T3L3ruvhgBpK91stttRuGuBbZnlkl84gUp4lkWt80MYxAy5y7zhuaavq14sWHaqEm9e7M.OIaJpEZjq/n1:1000:1000:zhang:/home/zhang:/bin/bash zhan:$6$eMFgn5mA4ns/rV0D$jW/KYz1v7bE8j19ud9w4qyKEbLBVyKrJ8whJwyMPGbr1RpA.g0q00nMCDtcV4yVKq8Qk/vyC22S/0LOxlfTgB1:1002:1002:zhang:/home/zhan:/bin/bash 命令中是搜索以^zh开头后面任意个字符的行^ : 行尾锚定 [root@localhost ~]# grep "/bin/bash$" /etc/passwd root:$6$OVorHBGEwUXX/g0y$bibxqzr48k8TJfCu3iH5q647eJK/V0PbF6SdR84YRRvDqGAw.rvE25ln8srHkuOoxK8fyrSyi/LinbL5MYoDY/:0:0:root:/root:/bin/bas zhang:$6$zZqpuWCkSO.eY1Rq$M1Y9T3L3ruvhgBpK91stttRuGuBbZnlkl84gUp4lkWt80MYxAy5y7zhuaavq14sWHaqEm9e7M.OIaJpEZjq/n1:1000:1000:zhang:/home/zhang:/bin/bash zhan:$6$eMFgn5mA4ns/rV0D$jW/KYz1v7bE8j19ud9w4qyKEbLBVyKrJ8whJwyMPGbr1RpA.g0q00nMCDtcV4yVKq8Qk/vyC22S/0LOxlfTgB1:1002:1002:zhang:/home/zhan:/bin/bash gettoo:!!:1003:1003::/home/gettoo:/bin/bash 命令中我们是搜索以/bin/bash为结尾的行,搜索4条刚好都是以/bin/bash结尾的^$ : 空行 [root@localhost ~]# grep "^$" .bashrc [root@localhost ~]# cat .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ " # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi 命令刚好搜索出.bashrc内有两行空行
分组
\(\) 分组配合着其它锚定一起使用有一定的便捷性,如我们去取 ifconfig 的ip地址 [root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.3 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::4f5c:981f:ccf5:8821 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:12:ae:2f txqueuelen 1000 (Ethernet) RX packets 3779 bytes 430543 (420.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2473 bytes 1029483 (1005.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]# ifconfig |grep -o "inet [[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}" inet 192.168.3.3 inet 172.18.252.88 inet 127.0.0.1 inet 192.168.122.1 以上的采取Ip的地址虽然不是很精确代码也不是很简洁,但也实现在取ip的结果
阅读全文
0 0
- grep及正则表达式
- grep 及 正则表达式
- grep及正则表达式
- grep及正则表达式
- grep及正则表达式
- grep及正则表达式
- Linux-grep及正则表达式
- linux grep 及正则表达式
- day06-grep及正则表达式
- grep 正则表达式及选项以及注意
- grep 正则表达式及选项以及注意
- 基础正则表达式及grep的使用
- 第七章、grep及正则表达式
- 快速掌握grep命令及正则表达式
- 快速掌握grep命令及正则表达式
- Linux学习----grep及正则表达式
- Linux:正则表达式及:grep工具
- linux笔记-grep及正则表达式
- 杭电acm1062Text Reverse
- TP5的URL大小写问题
- Oracle 11g RAC 开启、修改归档方法
- CarbonData源码阅读(3)
- 加密文件
- grep及正则表达式
- mysql外链、索引、约束
- 线程同步之Semaphore
- linux常用知识点
- [教程]K米商家平台营销中心通用版本短信使用指南
- Mybatis 多对多注解 查询
- Android R 文件丢失
- 乒乓球
- java加锁的意义