2019-04-21 11:50:48 +08:00

64 lines
5.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h1 id="ack">ack</h1>
<p>比grep好用的文本搜索工具</p>
<h2 id="安装">安装</h2>
<div class="sourceCode" id="cb1"><pre><code class="language-bash"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="co"># ubuntu下要安装ack-grep因为在debian系中ack这个名字被其他的软件占用了。</span></a>
<a class="sourceLine" id="cb1-2" data-line-number="2"><span class="fu">sudo</span> apt-get install ack-grep</a>
<a class="sourceLine" id="cb1-3" data-line-number="3"><span class="co"># alpine Linux-apk软件包管理器 安装 ack</span></a>
<a class="sourceLine" id="cb1-4" data-line-number="4"><span class="ex">apk</span> install ack</a></code></pre></div>
<h2 id="参数">参数</h2>
<p>这些参数在linux上的适用频率是相当高的尤其是你用vim做为IDE的话</p>
<pre><code class="language-bash">-c(统记)/ -i(忽略大小)/ -h(不显示名称)/
-l(只显文件名)/ -n(加行号)/ -v(显示不匹配)</code></pre>
<h2 id="特点">特点</h2>
<p>ack官网列出了这工具的5大卖点</p>
<ol type="1">
<li>速度非常快,因为它只搜索有意义的东西。</li>
<li>更友好的搜索,忽略那些不是你源码的东西。</li>
<li>为源代码搜索而设计,用更少的击键完成任务。</li>
<li>非常轻便,移植性好。</li>
<li>免费且开源</li>
</ol>
<h2 id="实例">实例</h2>
<p>在记忆的时候大体上可以分为这几个部分:</p>
<blockquote>
<p>Searching 代码搜索<br />
Search output 搜索结果处理<br />
File presentation 文件展示<br />
File finding 文件查找<br />
File inclusion/exclusion 文件过滤</p>
</blockquote>
<p>grep常用操作</p>
<div class="sourceCode" id="cb3"><pre><code class="language-bash"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="fu">grep</span> -r <span class="st">&#39;hello_world&#39;</span> <span class="co"># 简单用法</span></a>
<a class="sourceLine" id="cb3-2" data-line-number="2"><span class="fu">grep</span> <span class="st">&#39;^hello_world&#39;</span> . <span class="co"># 简单正则</span></a>
<a class="sourceLine" id="cb3-3" data-line-number="3"><span class="fu">ls</span> -l <span class="kw">|</span> <span class="fu">grep</span> .py <span class="co"># 管道用法</span></a></code></pre></div>
<h3 id="searching">Searching</h3>
<p>简单的文本搜索,默认是递归的。</p>
<pre><code class="language-bash">ack-grep hello
ack-grep -i hello
ack-grep -v hello
ack-grep -w hello
ack-grep -Q &#39;hello*&#39;</code></pre>
<h3 id="search-file">Search File</h3>
<p>对搜索结果进行处理比如只显示一个文件的一个匹配项或者xxx</p>
<div class="sourceCode" id="cb5"><pre><code class="language-bash"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="ex">ack-grep</span> --line=1 # 输出所有文件第二行</a>
<a class="sourceLine" id="cb5-2" data-line-number="2"><span class="ex">ack-grep</span> -l <span class="st">&#39;hello&#39;</span> # 包含的文件名</a>
<a class="sourceLine" id="cb5-3" data-line-number="3"><span class="ex">ack-grep</span> -L <span class="st">&#39;print&#39;</span> # 非包含文件名</a></code></pre></div>
<h3 id="file-presentation">File presentation</h3>
<p>输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下</p>
<div class="sourceCode" id="cb6"><pre><code class="language-bash"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="ex">ack-grep</span> hello --pager=<span class="st">&#39;less -R&#39;</span> # 以less形式展示</a>
<a class="sourceLine" id="cb6-2" data-line-number="2"><span class="ex">ack-grep</span> hello --noheading # 不在头上显示文件</a>
<a class="sourceLine" id="cb6-3" data-line-number="3"><span class="ex">ack-grep</span> hello --nocolor # 不对匹配字符着色</a></code></pre></div>
<h3 id="file-finding">File finding</h3>
<p>没错它可以查找文件以省去你要不断的结合find和grep的麻烦虽然在linux的思想是一个工具做好一件事。</p>
<div class="sourceCode" id="cb7"><pre><code class="language-bash"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="ex">ack-grep</span> -f hello.py # 查找全匹配文件</a>
<a class="sourceLine" id="cb7-2" data-line-number="2"><span class="ex">ack-grep</span> -g hello.py$ # 查找正则匹配文件</a>
<a class="sourceLine" id="cb7-3" data-line-number="3"><span class="ex">ack-grep</span> -g hello --sort-files # 查找然后排序</a></code></pre></div>
<h3 id="file-inclusionexclusion">File Inclusion/Exclusion</h3>
<p>文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。</p>
<div class="sourceCode" id="cb8"><pre><code class="language-bash"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="ex">ack-grep</span> --python hello # 查找所有python文件</a>
<a class="sourceLine" id="cb8-2" data-line-number="2"><span class="ex">ack-grep</span> -G hello.py$ hello # 查找匹配正则的文件</a></code></pre></div>
<h2 id="参考资料">参考资料</h2>
<ul>
<li><a href="https://beyondgrep.com/">ack官网</a></li>
</ul>