网站搜索

使用正则表达式搜索纯文本数据的 6 个最佳 CLI 工具


本指南介绍了一些用于在文本文件中搜索匹配字符串或模式的最佳命令行工具。这些工具通常与正则表达式一起使用 - 缩写为 REGEX - 这是用于描述搜索模式的唯一字符串。

话不多说,让我们开始吧。

1.Grep命令

首先是 grep 实用工具 - 是 Global Regular Expression Print 的缩写,是一个功能强大的命令行工具,在文件中搜索特定字符串或模式时会派上用场。

Grep 默认情况下随现代 Linux 发行版一起提供,使您可以灵活地返回各种搜索结果。使用 grep,您可以执行多种功能,例如:

  • 在文件中搜索字符串或匹配模式。
  • 在 Gzip 压缩文件中搜索字符串或匹配模式。
  • 计算字符串匹配的数量。
  • 打印包含字符串或模式的行号。
  • 在目录中递归搜索字符串。
  • 执行反向搜索(即显示与搜索条件不匹配的字符串的结果)。
  • 搜索字符串时忽略大小写。

使用 grep 命令的语法非常简单:

grep pattern FILE

例如,要在文件(例如 hello.txt)中搜索字符串“Linux”,同时忽略大小写,请运行以下命令:

grep -i Linux hello.txt

要获取可与 grep 一起使用的更多选项,只需阅读我们的文章,其中包含更高级的 grep 命令示例。

2.sed命令

Sed——Stream Editor的缩写——是另一个有用的命令行工具,用于操作文本文件中的文本。 Sed 以非交互方式搜索、过滤和替换给定文件中的字符串。

默认情况下,sed命令将输出打印到STDOUT标准输出),这意味着执行结果打印在终端上,而不是打印在终端上。被保存在文件中。

sed命令调用如下:

sed -OPTIONS command [ file to be edited ]

例如,要将“Unix”的所有实例替换为“Linux”,请调用以下命令:

sed 's/Unix/Linux' hello.txt

如果您想要重定向输出而不是在终端上打印它,请使用重定向符号 ( > ),如图所示。

sed 's/Unix/Linux' hello.txt > output.txt

命令的输出保存到 output.txt 文件中,而不是打印在屏幕上。

要查看更多可以使用的选项,请再次查看手册页。

man sed

3. 确认命令

Ack 是一个用 Perl 编写的快速且可移植的命令行工具。 Ack 被认为是 grep 实用程序 的友好替代品,并以视觉上吸引人的方式输出结果。

Ack 命令在文件或目录中搜索包含与搜索条件匹配的行。然后它会突出显示行中的匹配字符串。
Ack能够根据文件扩展名来区分文件,并在一定程度上根据文件的内容来区分文件。

确认命令语法:

ack [options] PATTERN [FILE...]
ack -f [options] [DIRECTORY...]

例如,要检查搜索词 Linux,请运行:

ack Linux hello.txt

搜索工具非常智能,如果用户没有提供文件或目录,它会在当前目录和子目录中搜索搜索模式。

在下面的示例中,没有提供文件或目录,但 ack 已自动检测可用文件并搜索提供的匹配模式。

ack Linux

要在系统上安装 ack,请运行以下命令:

sudo apt install ack-grep    [On Debian/Ubuntu]
sudo dnf install ack-grep    [On CentOS/RHEL]

4.awk命令

Awk 是一种成熟的脚本语言,也是一种文本处理和数据操作工具。它搜索包含搜索模式的文件或程序。当找到字符串或模式时,awk 对匹配项或行执行操作,并将结果打印在 STDOUT 上。

AWK 模式括在大括号内,而整个程序则括在单引号内。

我们举个最简单的例子。假设您正在打印系统日期,如下所示:

date

假设您只想打印第一个值,即星期几。在这种情况下,将输出通过管道传输到 awk 中,如下所示:

date | awk '{print $1}'

要显示后续值,请使用逗号分隔它们,如下所示:

date | awk '{print $1,$2}'

上面的命令将显示星期几和月份的日期。

要获取可与 awk 一起使用的更多选项,只需阅读我们的 awk 命令系列。

5. 银色搜索者

silver searcher 是一个跨平台的开源代码搜索工具,类似于 ack 但更注重速度。它使您可以轻松地在最短的时间内搜索文件中的特定字符串:

句法 :

ag OPTIONS search_pattern /path/to/file

例如,要在文件 hello.txt 中搜索字符串“Linux”,请调用以下命令:

ag Linux hello.txt

有关其他选项,请访问手册页:

man ag

6.Ripgrep

最后,我们有 ripgrep 命令行工具。 Ripgrep 是一个用于搜索正则表达式模式的跨平台实用程序。它比前面提到的所有搜索工具都要快得多,并且会递归地搜索目录以查找匹配模式。就速度和性能而言,没有其他工具能比 Ripgrep 更出色。

默认情况下,ripgrep 将跳过二进制文件/隐藏文件和目录。另外,请注意,默认情况下,它不会搜索 .gitignore/.ignore/.rgignore 文件忽略的文件。

Ripgrep 还允许您搜索特定文件类型。例如,要将搜索限制为 Javascript 文件,请运行:

rg -Tsj

使用 ripgrep 的语法非常简单:

rg [OPTIONS] PATTERN [PATH...]

例如。要在当前目录内的文件中搜索字符串 ‘Linux’ 的实例,请运行以下命令:

rg Linux

要在系统上安装ripgrep,请运行以下命令:

sudo apt install ripgrep      [On Debian/Ubuntu]
sudo pacman -S ripgrep        [On Arch Linux]
sudo zypper install ripgrep   [On OpenSuse]
sudo dnf install ripgrep      [On CentOS/RHEL/Fedora]

有关其他选项,请访问手册页:

man rg

这些是一些最广泛使用的命令行工具,用于在 Linux 中搜索、过滤和操作文本。如果您认为我们遗漏了其他工具,请在评论部分告诉我们。