Loading... <p>一)、Linux的三大文本处理之GREP:</p> <p> GREP(Global search REgular expression and Print out the line,全面搜索正则表达式并把行打印出来):在给出文件列表或标准输出后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。—-摘自于维基百科</p> <p> GREP家族包括:</p> <p> grep:</p> <p> egrep:支持扩展正则表达式的grep,等同于grep -E。</p> <p> fgrep:fixed grep或fast grep,不支持正则表达式。</p> <hr /> <p>二)、语法格式:</p> <p><span class="Apple-tab-span"> </span>grep [option]… 'PATTERN' FILE…</p> <p><span class="Apple-tab-span"> </span>注意:以字符串逐行查找。</p> <p><span class="Apple-tab-span"> </span>常用命令选项:</p> <p><span class="Apple-tab-span"> </span>-v:反向选取,即显示不匹配的行。</p> <p><span class="Apple-tab-span"> </span>-o:仅显示匹配的字串,而非字串所在的行。</p> <p><span class="Apple-tab-span"> </span>-i:ignore-case,忽略字符大小写。</p> <p><span class="Apple-tab-span"> </span>-E:支持使用扩展正则表达式。</p> <p><span class="Apple-tab-span"> </span>-A #:显示匹配行及下#行。</p> <p><span class="Apple-tab-span"> </span>-B #:显示匹配行及上#行。</p> <p><span class="Apple-tab-span"> </span>-C #:显示匹配行及上下#行。</p> <p><span class="Apple-tab-span"> </span>–color=auto:匹配到的字符串显示颜色。</p> <p></p> <hr /> <p></p> <p>三)、正则表达式:</p> <p> Regular Expression,在代码中常简写为regex、regexp或RE,计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。—-摘自于维基百科</p> <hr /> <p>四)、元字符:</p> <p> 1)、字符匹配:</p> <p> .:匹配任意一个单个字符</p> <p> []:匹配一个指定范围内的字符</p> <p> [^]:匹配一个不在指定范围内的字符</p> <p> [:digit:]:数字字符,即[0-9]</p> <p> [:lower:]:小写字符,即[a-z]</p> <p> [:upper:]:大写字符,即[A-Z]</p> <p> [:alpha:]:文字字符,即[A-Z,a-z]</p> <p> [:alnum:]:文字数字字符,即[A-Z,a-z,0-9]</p> <p> [:xdigit:]:十六进制数字,即[0-9,a-f,A-F]</p> <p> [:punct:]:标点符号</p> <p> [:space:]:空白字符</p> <p> [:graph:]:非空白字符</p> <p> [:cntrl:]:控制字符</p> <p> [:print:]:非空字符(包括空格)</p> <p></p> <p> 2)、次数匹配:</p> <p> *:零次或多次先前字符。</p> <p> .*:任意次任意字符</p> <p> \?:零次或一次先前字符。</p> <p> \{m\}:先前字符重复m次。</p> <p> \{m,n\}:先前字符m到n次。</p> <p> \{m,\}:先前字符至少m次。</p> <p> \{0,n\}:先前字符至多n次。</p> <p></p> <p> 3)、位置锚定:</p> <p style="line-height: 16px"> ^:行首锚定。</p> <p> $:行尾锚定。</p> <p> ^$:空白行。</p> <p> \<,\b:锚定词首,出现于单词左侧。</p> <p> \>,\b:锚定词尾,出现于单词右侧。</p> <p> \<..\>,\b..\b:单词锁定符。</p> <p></p> <p> 4)、分组和引用:</p> <p> \(..\):</p> <p> 分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。</p> <p> \#:</p> <p> 引用第n个括号所匹配到的内容,而非模式本身。</p> <hr /> <p>五)、扩展正则表达式</p> <p> 1)、字符匹配:</p> <p> 与基本正则表达式相同。</p> <p> 2)、次数匹配</p> <p> 与基本正则表达式相同,且无需转译。</p> <p> +:一次或多次先前字符。</p> <p> a|b:分支,a或b,</p> <p> con(C|c)at:concat或conCat</p> <p> conC|cat:conC或cat</p> <p> 3)、位置锚定:</p> <p> 与基本正则表达式相同。</p> <p> 4)、分组和引用</p> <p> 与基本正则表达式相同,分组无需转译。</p> <p></p> <hr /> <p>六)、实例说明:</p> <p>01、显示/proc/meminfo文件中以大写或小写S开头的行。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto -i '^s' /proc/meminfo #grep --color=auto -E '^(s|S)' /proc/meminfo</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-46.jpg" title="1431959526140463.jpg" alt="1.jpg" /></p> <p></p> <p>02、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto -v "/sbin/nologin$" /etc/passwd | cut -d: -f1</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-16.jpg" title="1431959858169135.jpg" alt="2.jpg" /></p> <p></p> <p>03、显示/etc/passwd文件中其默认shell为/bin/bash的用户;</p> <p> 进一步:仅显示上述结果中其ID号最大的用户。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -n 1 | cut -d: -f1,3,7</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-90.jpg" title="1431960190164226.jpg" alt="3.jpg" /></p> <p></p> <p>04、找出/etc/passwd文件中的一位数或两位数。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto "\<[[:digit:]]\{1,2\}\>" /etc/passwd</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-67.jpg" title="1431960515911997.jpg" alt="4.jpg" /></p> <p></p> <p>05、显示/boot/grub/grub.conf中以至少一个空白字符开头的行。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto "^[[:space:]]\{1,}" /boot/grub/grub.conf</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-7.jpg" title="1431962706890926.jpg" alt="5.jpg" /></p> <p></p> <p>06、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-9.jpg" title="1431960981386967.jpg" alt="6.jpg" /></p> <p></p> <p>07、找出netstat -tan命令执行结果中以'LISTEN'结尾的行。</p> <pre class="brush:bash;toolbar:false">#netstat -tan | grep --color=auto "LISTEN[[:space:]]*$"</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-52.jpg" title="1431961263115812.jpg" alt="7.jpg" /></p> <p></p> <p>08、添加用户bash、testbash、basher、nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto "^\([[:alpha:]]\{1,\}\):.*/\1$" /etc/passwd</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-15.jpg" title="1431962021113971.jpg" alt="8.jpg" /></p> <p></p> <p>09、显示当前系统上root、rhel或centos用户的默认shell。</p> <pre class="brush:bash;toolbar:false">#grep --color=auto -E "^(root|rhel|centos):.*" /etc/passwd | cut -d: -f1,7</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-30.jpg" title="1431962937111020.jpg" alt="9.jpg" /></p> <p>10、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号"()"行</p> <pre class="brush:bash;toolbar:false">#grep --color=auto -E "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-63.jpg" title="1431963348651501.jpg" alt="10.jpg" /></p> <p></p> <p>11、找出ifconfig命令结果中的1-255之间的数字;</p> <pre class="brush:bash;toolbar:false">#ifconfig | grep --color=auto -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"</pre> <p><img src="//cto.wang/usr/uploads/2016/07/20160703180319-4.jpg" title="1431965057125437.jpg" alt="11.jpg" /></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信