CLI 工具是 rust 非常擅长的一个领域。从这篇文章开始,我将带大家从零开始做一个简易 grep 命令行工具。

本专栏主要参考了该教程,也欢迎关注这个系列专栏,我将更新更多精彩内容。


可爱的rust logo面包蟹

1. 目标

我们的目标主要是为了能够实现一个简易的grep命令行工具。

英文教程原作者给这个软件起名grrs(读作 grass),那么我们也叫这个名字吧!

简单而言,这个软件可以对纯文本文件的内容进行查询。

我们希望实现的基本内容查询命令是:

grrs.exe <PATTERN> <PATH>

也就是说,我们需要传入一个搜索模式,和一个被搜索文件的路径。这样的设计,和grep的原版设计是一样的。

例如,我们可能想要查./src/main.rs文件中包含的content变量名的内容:

搜索成功命令行界面示意

这就是我们第二篇文章全部完成后将达到的效果,是不是很清晰呢?

也就是说,读完本专栏头两篇文章,就可以实现grrs最初可用原型。


2. 前置知识

这个系列教程假定读者是掌握其他编程语言,但是对 rust 不够熟悉的开发者。我将尽我所能地介绍一些 rust 独有的编码风格和语言特性,帮助对 rust 特有机制不够熟悉的朋友理解这个语言。

当然,如果你在阅读过程中遇到任何问题,欢迎在评论区留言,也可以查阅 rust 语言的官方入门教程

在开始我们正式讲解前,你需要准备的是可以在本地运行的 rust 环境。本文写作时使用的 rustc 版本为:

rustc 1.87.0 (17067e9ac 2025-05-09)

我建议读者在运行本项目的代码时还是使用最新的 rust 工具链版本。即便 rust 未来有了新的变化,这个项目的代码基本可以肯定还是能够继续运行的。


3. 新建项目

rust 的工程管理工具是 Cargo。这个工具基本集成了 rust 开发全部所需的周边支持基础设施,包括包管理、代码格式化(fmt)、测试(test)、代码风格检查(clippy)等,总之就是非常好用。

我们新建一个项目:

cargo new grrs
cd grrs

进入目录后,我们可以看到 cargo 为我们建立的文件夹结构是:

./
├── .gitignore
├── Cargo.lock
├── Cargo.toml
└── src/
    └── main.rs

这些文件的作用是:

  • .gitignore:帮助 git 理解需要忽略哪些文件和文件夹,不被计入版本管理
  • Cargo.lock:Cargo 自动生成的详细依赖信息,不需要开发者阅读理解
  • Cargo.toml:开发者自己维护的项目元数据和依赖信息。用好这个 toml 文件,就可以对项目的各种依赖库进行轻松的增加、删除、升级等操作
  • src文件夹:一般源代码放在这个文件夹下
    • main.rs:Cargo 自动生成的 hello world 代码文件。注意 rust 代码后缀是.rs

用你最喜欢的代码编辑器打开main.rs,你应该看到如下内容:

fn main() {
    println!("Hello, world!");
}

让我们运行一下这个初始项目:

cargo run

你应该能够看到如下输出结果:

程序输出的hello world结果

如果你的程序正常输出了“Hello world!“,那么恭喜你,你的环境配置成功,你已经具备进入正式工程的全部基础了!

下一篇文章,我们将一起实现这个 CLI 工具的初始版本。


希望这篇博客能帮助到你,也欢迎关注交流。愿与君共勉!

点击阅读下一篇文章