Loading... <h1 id="linux文本搜索工具grep">Linux文本搜索工具grep</h1> <hr /> <p></p> <ul class=" list-paddingleft-2"> <li> <p>Linux文本搜索工具grep</p> </li> <ul class=" list-paddingleft-2"> <li> <p>grep</p> </li> <li> <p>基本正则表达式</p> </li> <li> <p>egrep</p> </li> <li> <p>扩展正则表达式</p> </li> <li> <p>fgrep</p> </li> </ul> </ul> <p></p> <hr /> <h2 id="简介">简介</h2> <blockquote class="white-blockquote"><p style="margin-top: 0px;margin-bottom: 0px;line-height: 25px">grep(全称Globally search a Regular Expression and Print,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行匹配检查,打印匹配到的行。</p> </blockquote> <p> 家族成员: <br /> grep:支持基本正则表达式 <br /> egrep:相当于grep -E,支持扩展正则表达式 <br /> fgrep:相当于grep -F,不支持正则表达式</p> <hr /> <h2 id="主要参数及使用">主要参数及使用</h2> <h3 id="grep">grep</h3> <p><span style="font-weight: 700">格式:</span> grep [OPTIONS] PATTERN [FILE…]</p> <p>常用选项: <br /><span style="font-weight: 700">–color=auto:</span>对匹配的文本着色显示 <br /><span style="font-weight: 700">注:</span> CentOS 7默认设置该参数。</p> <p><span style="font-weight: 700">-v:</span>显示不能被pattern匹配到的行</p> <pre class="brush:bash;toolbar:false;"># cat test how are you? hellow # grep -v are test hellow</pre> <blockquote class="white-blockquote"><p style="margin-top: 0px;margin-bottom: 0px;line-height: 25px">提示:如test文件内容发生改变,会用cat命令将其展示,反之则表示内容不变</p> </blockquote> <p><span style="font-weight: 700">-i:</span>忽略字符大小写</p> <pre class="brush:bash;toolbar:false;"># cat test how are you? HOW ARE YOU? # grep are test how are you? # grep ARE test HOW ARE YOU? # grep -i are test how are you? HOW ARE YOU?</pre> <p><span style="font-weight: 700">-o:</span>仅显示匹配到的字符串</p> <pre class="brush:bash;toolbar:false;"># cat test how are you? # grep -o are test are</pre> <p><span style="font-weight: 700">-q:</span>静默模式,不输出任何信息 <br /> 静默模式下不会输出任何信息,命令的执行结果可以通过echo $?查询。</p> <pre class="brush:bash;toolbar:false;"># cat test name # grep -q name test # echo $? 0 # grep -q what test # echo $? 1</pre> <p><span style="font-weight: 700">-A #:</span>显示匹配的后#行信息</p> <pre class="brush:bash;toolbar:false;"># cat test how are you? HOW ARE YOU? hello # grep -A 1 ARE test HOW ARE YOU? hello</pre> <p><span style="font-weight: 700">-B #:</span>显示匹配的前#行信息</p> <pre class="brush:bash;toolbar:false;"># grep -B 1 ARE test how are you? HOW ARE YOU?</pre> <p><span style="font-weight: 700">-C #:</span>显示匹配的前后各#行信息</p> <pre class="brush:bash;toolbar:false;"># grep -C 1 ARE test how are you? HOW ARE YOU? hello</pre> <hr /> <h3 id="基本正则表达式元字符">基本正则表达式</h3> <blockquote class="white-blockquote"><p style="margin-top: 0px;margin-bottom: 0px;line-height: 25px">正则表达式由普通字符和元字符组成。普通字符包括大小写字母和数字,而元字符则具有特殊意义,接下来将对元字符进行介绍。</p> </blockquote> <ul class=" list-paddingleft-2"> <li> <p>字符匹配:</p> </li> </ul> <p><span style="font-weight: 700">.</span>:匹配任意单个字符 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-20.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">[]</span>:匹配指定范围内任意单个字符 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-82.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">[^]</span>:匹配指定范围外任意单个字符 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-2.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /> <br />专用字符集合: <br />[:digit:]:任意数字,相当于0-9 <br />[:lower:]:任意小写字母 <br />[:upper:]:任意大写字母 <br />[:alpha:]:任意大小写字母 <br />[:alnum:]:任意数字或字母 <br />[:space:]:空格 <br />[:punct:]:标点符号</p> <ul class=" list-paddingleft-2"> <li> <p>匹配次数: <br />用在要指定次数的字符后面,用于指定前面的字符要出现的次数</p> </li> </ul> <p><span style="font-weight: 700">*</span>:匹配前面字符任意次 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-4.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /> <br />注:a*c筛选的是含有c的行,a*是指a可以出现任意次也可没有。</p> <p><span style="font-weight: 700">.*</span>:匹配任意长度的任意字符(.为任意字符 *为任意次数) <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-22.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">\?</span>:匹配其前面的字符0或1次,即前面的可有可无 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-72.jpg" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">\+</span>:匹配其前面的字符至少1次 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-24.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">\{m\}</span>:匹配前面的字符m次 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-16.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">\{m,n\}</span>:匹配前面的字符至少m次,至多n次 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-96.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /> <br />\{0,n\}:匹配前面的字符至多n次 <br />\{m,\}:匹配前面的字符至少m次</p> <ul class=" list-paddingleft-2"> <li> <p>位置锚定:</p> </li> </ul> <p><span style="font-weight: 700">^</span>:行首锚定,用于模式的最左侧 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-58.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">$</span>:行尾锚定,用于模式的最右侧 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-24-1.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">^PATTERN$</span>:用模式匹配整行 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-26.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p>^$:匹配空行,主要配合-v取反消除空行</p> <p>^[[:space:]]*$:在^$匹配不到的时候使用</p> <p><span style="font-weight: 700">\<</span>或<span style="font-weight: 700">\b</span>:词首锚定,用于单词模式的左侧 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-89.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">\></span>或<span style="font-weight: 700">\b</span>:词尾锚定,用于单词模式的右侧 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-81.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><code>\<PATTERN\></code>:匹配整个单词 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-40.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <ul class=" list-paddingleft-2"> <li> <p>分组:</p> </li> </ul> <p><code>\(\)</code>:将一个或多个字符捆绑在一起,当作一个整体进行处理 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-56.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p>当我们想后续内容与前面模式匹配到的一样,则需要使用到引用也称后向引用。 <br />后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身 <br /><img src="//cto.wang/usr/uploads/2016/07/20160703180910-18.png" alt="" title="" style="height: auto;max-width: 100%;vertical-align: middle;border: 0px" /></p> <p><span style="font-weight: 700">注:</span>分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, … <br />\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 <br />例: (ab+(xy)*) <br /> \1: ab+(xy)* <br /> \2: xy</p> <hr /> <h3 id="egrep">egrep</h3> <p>egrep=grep -E <br />格式:egrep [OPTIONS] PATTERN [FILE…] <br />常用选项与grep相同</p> <h3 id="扩展正则表达式">扩展正则表达式</h3> <blockquote class="white-blockquote"><p style="margin-top: 0px;margin-bottom: 0px;line-height: 25px">相对于基本正则表达式而言扩展正则表达式在某些参数上可以不使用转义符(\),在使用方式上并没有区别</p> </blockquote> <p>接下来将介绍扩展正则表达式与基本正则表达式不同的地方,相同点不再累述</p> <ul class=" list-paddingleft-2"> <li> <p>次数匹配</p> </li> </ul> <p><span style="font-weight: 700">?</span>:匹配其前面的字符0或1次,即前面的可有可无 <br /><span style="font-weight: 700">+</span>:匹配其前面的字符至少1次 <br /><span style="font-weight: 700">{m}</span>:匹配前面的字符m次 <br /><span style="font-weight: 700">{m,n}</span>:匹配前面的字符至少m次,至多n次</p> <ul class=" list-paddingleft-2"> <li> <p>分组</p> </li> </ul> <p><span style="font-weight: 700">()</span>:将一个或多个字符捆绑在一起,当作一个整体进行处理</p> <ul class=" list-paddingleft-2"> <li> <p>或者</p> </li> </ul> <p><span style="font-weight: 700">注</span>:<span>基本正则表达式可以使用</span><code>\|</code><span>代表或者 </span></p> <p><span style="font-weight: 700">a|b</span>:a或者b <br />C|cat:C或cat <br />(C|c)at:Cat或cat</p> <hr /> <h3 id="fgrep">fgrep</h3> <blockquote class="white-blockquote"><p style="margin-top: 0px;margin-bottom: 0px;line-height: 25px">fgrep不支持正则表达式,表达式仅作普通字符处理</p> </blockquote> <p>fgrep=grep -F</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信