CLI 工具是 rust 非常擅长的一个领域。从这篇文章开始,我将带大家从零开始做一个简易 grep 命令行工具。
本专栏主要参考了该教程,也欢迎关注这个系列专栏,我将更新更多精彩内容。

我们的目标主要是为了能够实现一个简易的grep命令行工具。
英文教程原作者给这个软件起名grrs(读作 grass),那么我们也叫这个名字吧!
简单而言,这个软件可以对纯文本文件的内容进行查询。
我们希望实现的基本内容查询命令是:
grrs.exe <PATTERN> <PATH>
也就是说,我们需要传入一个搜索模式,和一个被搜索文件的路径。这样的设计,和grep的原版设计是一样的。
例如,我们可能想要查./src/main.rs文件中包含的content变量名的内容:

这就是我们第二篇文章全部完成后将达到的效果,是不是很清晰呢?
也就是说,读完本专栏头两篇文章,就可以实现grrs最初可用原型。
这个系列教程假定读者是掌握其他编程语言,但是对 rust 不够熟悉的开发者。我将尽我所能地介绍一些 rust 独有的编码风格和语言特性,帮助对 rust 特有机制不够熟悉的朋友理解这个语言。
当然,如果你在阅读过程中遇到任何问题,欢迎在评论区留言,也可以查阅 rust 语言的官方入门教程。
在开始我们正式讲解前,你需要准备的是可以在本地运行的 rust 环境。本文写作时使用的 rustc 版本为:
rustc 1.87.0 (17067e9ac 2025-05-09)
我建议读者在运行本项目的代码时还是使用最新的 rust 工具链版本。即便 rust 未来有了新的变化,这个项目的代码基本可以肯定还是能够继续运行的。
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!“,那么恭喜你,你的环境配置成功,你已经具备进入正式工程的全部基础了!
下一篇文章,我们将一起实现这个 CLI 工具的初始版本。
希望这篇博客能帮助到你,也欢迎关注交流。愿与君共勉!
CLI 工具是 rust 非常擅长的一个领域。从这篇文章开始,我将带大家从零开始做一个简易 grep 命令行工具。
本专栏主要参考了该教程,也欢迎关注这个系列专栏,我将更新更多精彩内容。

我们的目标主要是为了能够实现一个简易的grep命令行工具。
英文教程原作者给这个软件起名grrs(读作 grass),那么我们也叫这个名字吧!
简单而言,这个软件可以对纯文本文件的内容进行查询。
我们希望实现的基本内容查询命令是:
grrs.exe <PATTERN> <PATH>
也就是说,我们需要传入一个搜索模式,和一个被搜索文件的路径。这样的设计,和grep的原版设计是一样的。
例如,我们可能想要查./src/main.rs文件中包含的content变量名的内容:

这就是我们第二篇文章全部完成后将达到的效果,是不是很清晰呢?
也就是说,读完本专栏头两篇文章,就可以实现grrs最初可用原型。
这个系列教程假定读者是掌握其他编程语言,但是对 rust 不够熟悉的开发者。我将尽我所能地介绍一些 rust 独有的编码风格和语言特性,帮助对 rust 特有机制不够熟悉的朋友理解这个语言。
当然,如果你在阅读过程中遇到任何问题,欢迎在评论区留言,也可以查阅 rust 语言的官方入门教程。
在开始我们正式讲解前,你需要准备的是可以在本地运行的 rust 环境。本文写作时使用的 rustc 版本为:
rustc 1.87.0 (17067e9ac 2025-05-09)
我建议读者在运行本项目的代码时还是使用最新的 rust 工具链版本。即便 rust 未来有了新的变化,这个项目的代码基本可以肯定还是能够继续运行的。
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!“,那么恭喜你,你的环境配置成功,你已经具备进入正式工程的全部基础了!
下一篇文章,我们将一起实现这个 CLI 工具的初始版本。
希望这篇博客能帮助到你,也欢迎关注交流。愿与君共勉!