LINUX教学:grep文本过滤工具与正则表达式
《LINUX教学:grep文本过滤工具与正则表达式》要点: 敕令:grep 格局:grep [OPTIONS] PATTERN 选项:? --color=auto 将匹配的成果着色显示 -v 反向匹配 -i 忽略年夜小写 -n 显示的成果前增加行号 -c 仅显示匹配到成果的行数 -o 仅显示匹配到的字符串 -q 静默模式,不输出任何信息 相称于 &> /dev/null -A# 显示症结字行及向后#行 -B# 显示症结字行及向前#行 -C# 显示症结字向前#行,当前行,及向后#行 -e 症结字1 -e 症结字2? 实现多个选项间的逻辑or关系 -w 匹配整个单词 -E 使用扩大正则表达式 或egrep -F 不使用正则表达式 或 fgrep Patten格局:引用变量或文本用“”or‘’引起来, ? ? ? ? ? ? ? ? ? ? ? 引用敕令则用``(反引号)引起来. 正则表达式正则表达式是由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表现字符字面意义,而表现控制或通配的功能.支持程序有grep,sed,awk,vim,less,nginx,varnish……它分为基本正则表达式和扩展正则表达式两类,用于grep中,则grep后支持基本正则表达式,grep -E或egrep后支持扩展正则表达式. 字符匹配
匹配次数匹配次数用于要指定次数的字符后面,用于指定前面的字符要呈现的次数.
位置锚定位置锚定用于定位呈现的位置.
后向引用说到后向引用,我们先要了解一个概念——分组.分组就是用()把一个或多个字符捆绑在一起,当做一个整体进行处理,当然,在我们的基本正则表达式中,()必要用来转义,所以,用法如下: (root)+? 代表匹配root至少一次 在分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的定名方式为:1,2,3…… n便是从左侧起第n个左括号以及与之匹配的有括号之间的模式所匹配到的字符. eg:(string1+(string2)*) ? ? ? ? 1 :string1+(string2)* ? ? ? ? 2 :string2 后向引用:引用前面的分组括号中的模式所匹配的字符,而非模式自己. 单说概念年夜家应该不会很明白,那我们来看一个例子,因为后向引用很重要,所以我们就说细致一点.(敲黑板!划重点!) 这个是我们的文件,假如我们想匹配所有行,应该怎么做呢?就用到我们上面所说到的正则表达式的知识. 我们把这个命令零丁拉出来说:grep "^h.{4}.*h.{4}$" example ^h.{4}表现匹配以h后加任意4个字符为开头,.*表现匹配任意多个字符,h.{4}$表现匹配以h后加任意4个字符为结尾.hello和hiiii都是以h后跟4个任意字符组成的,所以上述命令就可以匹配所有的行. 那么,如果我只想匹配开头和结尾单词一样的行呢?也便是职匹配前两行.这个时候,我们就要用到后向引用了,如下: 上述敕令就可以完成我们的需求,我们来详细的说一下这个敕令. 分为两部门:红框内:(h.{4})? 蓝框内:1 先说红框内的,这个和我们上一个示例没有区别,只是加了()括起来,含义还是不变,依然表现h后跟任意4个字符. 那么蓝框内呢?是什么意思? “1”表示的便是从左侧起第1个左括号以及与之匹配的有括号之间的模式所匹配到的字符.上述我们只有一对括号,所以蓝框内的“1”表示的便是红框内“(h.{4})”所匹配到的内容.如果没看明白,那么看看下面这张图吧: 现在可以明白为什么要添加括号分组了吗?因为当我们添加了括号分组,“h.{4}”就成为整个正则中第1个分组中的正则,当“h.{4}”匹配到的结果为hello时,“1”引用的便是hello,当“h.{4}”匹配到的结果是hiiii时,“1”引用的便是hiiii. 这个便是所谓的后项引用了.当然,3的内容相信也就不言而喻了. 扩大的正则表达式命令:egrep? =? grep -E 格局:egrep [OPTIONS] PATTERN [FILE...] 扩展的正则表达式与正则表达式的元字符大致一样.为什么叫他扩展的正则表达式呢?因为在扩展正则表达式中,除了词首词尾锚定和后项引用以外,其他的元字符都可以直接引用,不必要加“”转义. 小练习讲了这么多东西,我们来做一些题练练手吧~提供的答案仅为参考,因为分歧的解题思路,你的解题步骤也会有所分歧喏,小伙伴们尽情发挥吧(〃'▽'〃) 1、统计当前连接本机的每个长途主机IP的连接数,并按从大到小排序 netstat -tun |grep "[0-9]" |tr -s " " ":" |cut -d: -f6 |sort |uniq -c |sort -n 2、显示/etc/passwd文件中不以/bin/bash结尾的行 cat /etc/passwd | grep -v /bin/bash$ 3、找出/etc/passwd中的两位或三位数 cat /etc/passwd |grep "b[0-9]{2,3}b" 4、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开首的且后面存非空白字符的行 cat /etc/grub2.cfg |grep "^[[:space:]]+[^[:space:]].*$" 5、 使用egrep掏出/etc/rc.d/init.d/functions中其基名 echo /etc/rc.d/init.d/functions | egrep -o "[^/]+/?$" 6、找出/etc/rc.d/init.d/functions文件中行首为某单词(包含下划线)后面跟一个小括号的行 cat /etc/rc.d/init.d/functions |egrep "^.*[^[:space:]]()" 7、统计last敕令中以root登录的每个主机IP地址登录次数 last |grep ^root |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort |uniq -c 8、显示ifconfig命令成果中所有IPv4地址 ifconfig | egrep -o "&;(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])&;" 9、显示三个用户root、mage、wang的UID和默认shell cat /etc/passwd |egrep "^(root|mage|wang)b" |cut -d: -f3,7 10、只利用df、grep和sort,取出磁盘各分区利用率,并从年夜到小排序 df |grep sd |grep -Eo "[0-9]{1,3}%" |sort -nr Linux敕令-文件文本操作grep? grep正则表达式 Linux中正则表达式与文件格式化处置命令(awk/grep/sed) Linux根基之grep和正则表达式 14 个 grep 敕令的例子 Linux文本处置工具grep和正则表达式及egrep与grep区别? Linux根基之-正则表达式(grep,awk)? Linux文本处置工具及grep? ? grep敕令中文手册(info grep翻译)? grep 命令系列:如安在 UNIX 中根据文件内容查找文件 本文永远更新链接地址: 欢迎参与《LINUX教学:grep文本过滤工具与正则表达式》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |