本章回顾你已经学过的许多技能,并探索标准库的另外一些功能。我们将构建一个与文件和命令行输入、输出交互的命令行工具,借此练习目前已经掌握的 Rust 概念。
Rust 的速度、安全性、单一二进制文件输出和跨平台支持,使它适合创建命令行工具。因此,这个项目将实现我们自己的经典命令行搜索工具 grep。这个名称来自“globally search a regular expression and print”,即全局搜索正则表达式并打印。在最简单的用法中,grep 在指定文件中搜索指定字符串:它接收文件路径和字符串作为参数,读取文件,找出包含该字符串的行,然后打印这些行。
在此过程中,我们会展示如何让工具使用其他许多命令行工具也采用的终端功能。我们将读取环境变量的值,让用户配置工具的行为。我们还会把错误消息输出到标准错误流 stderr,而不是标准输出流 stdout。这样,用户就能把成功结果重定向到文件,同时仍在屏幕上看到错误消息。
Rust 社区成员 Andrew Gallant 已经创建了功能完整且非常快的 grep 版本,名为 ripgrep 。相比之下,我们的版本十分简单,但本章会提供理解 ripgrep 这样的实际项目所需的一些背景知识。
这个 grep 项目将结合你已经学过的若干概念:
我们还将简要介绍闭包、迭代器和 trait 对象。第 13 章 和第 18 章 会详细讨论这些内容。
来源:The Rust Project Developers,《The Rust Programming Language》贡献者,An I/O Project: Building a Command Line Program ,核验于 2026-10-03。本稿翻译该 URL 本页正文,未扩展到链接指向的完整章节或额外脚本;代码保留原文,不宣称原创。译文及说明为修改部分。
原文与代码许可:MIT(从 MIT / Apache-2.0 双许可中选择 MIT) ;附 完整许可文本 。材料按原样提供;不表示原作者或项目背书。
许可文本
Copyright (c) 2010 The Rust Project Developers
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
静态核验:本页没有代码块,无命令执行;五项先前章节知识及闭包/迭代器/trait对象链接保留;只翻译引言,不将Notion整章摘要误当本页正文。未执行示例、安装依赖、调用模型下载或使用 GPU。
暂无评论内容