<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Grep on Foam 的博客</title>
    <link>https://blog.foamzou.com/tags/grep/</link>
    <description>Recent content in Grep on Foam 的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 22 Jan 2022 16:32:28 +0800</lastBuildDate>
    <atom:link href="https://blog.foamzou.com/tags/grep/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 ripgrep 替换 grep</title>
      <link>https://blog.foamzou.com/posts/ripgrep/</link>
      <pubDate>Sat, 22 Jan 2022 16:32:28 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/ripgrep/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; 在 *nix 系统都有预装，也是程序员日常工作经常用到的工具。我最近的工作，涉及到很多大文本处理，grep 处理得不是很快。于是就用到了 ripgrep，这个工具跑起来快很多。本文主要摘录自己平时可能会用到的用法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;
&lt;p&gt;在 &lt;a href=&#34;https://github.com/BurntSushi/ripgrep#installation&#34;&gt;GitHub Repo&lt;/a&gt; 的指引下找到你对应的系统命令安装即可，一行命令。&lt;/p&gt;
&lt;p&gt;安装完之后，ripgrep 的可执行命令是 &lt;code&gt;rg&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;常用参数&#34;&gt;常用参数&lt;/h2&gt;
&lt;h3 id=&#34;一般搜索&#34;&gt;一般搜索&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg str sample.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;默认，标准输出会高亮你的搜索词，并且每行前面会有行号。不过请放心，重定向到另一个文本时，是不包含行号的。&lt;/p&gt;
&lt;p&gt;如果你不想要输出行号，使用 &lt;code&gt;-N&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg str sample.txt -N
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;统计行数&#34;&gt;统计行数&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg str sample.txt -c  # 相当于 grep str sample.txt | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;and-条件&#34;&gt;And 条件&lt;/h3&gt;
&lt;p&gt;A ha, 现在还不支持，老早就有很多用户提这个需求了。看看固执的作者什么时候允许加上。可以关注这个 &lt;a href=&#34;https://github.com/BurntSushi/ripgrep/issues/875&#34;&gt;Issue&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;只能管道后再次筛选了， &lt;code&gt;--color always&lt;/code&gt; 是为了第一个搜索词也能被高亮&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg str sample.txt --color always | rg str2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;or-条件&#34;&gt;Or 条件&lt;/h3&gt;
&lt;p&gt;使用多个 -e 参数 作为条件。只要匹配到任何一个搜索词，都会被匹配到&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg -e &amp;#39;str1&amp;#39; -e &amp;#39;str2&amp;#39; -e &amp;#39;str3&amp;#39; sample.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;匹配到n条结果就停止&#34;&gt;匹配到N条结果就停止&lt;/h3&gt;
&lt;p&gt;很多情况下，我们知道只有 N 条匹配项，为了节约时间，希望匹配到足够数量就不要往下搜索了。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
