3 个版本
0.1.2 | 2023 年 11 月 30 日 |
---|---|
0.1.1 | 2023 年 11 月 30 日 |
0.1.0 | 2023 年 11 月 30 日 |
#490 in 文本处理
120KB
182 行
MiniGrep
MiniGrep 是一个用 Rust 编写的简单命令行工具,用于在文件中搜索文本。它提供了在指定文件中搜索指定查询字符串的功能,显示包含查询的行以及它们的行号。
用法
命令语法
minigrep [query] [file path(s)] [-i]
- 查询:在文件中搜索的文本字符串。
- 文件路径:执行搜索的文件路径,用逗号分隔。您也可以使用 "." 在当前目录中进行搜索。
- -i(可选):执行不区分大小写的搜索。如果提供,则搜索将忽略查询字符串的大小写。
示例
# Perform a case-sensitive search for the word "hello" in the file "sample.txt"
minigrep hello sample.txt
# Perform a case-sensitive search for the word "hello" in the files "sample.txt" and "sample2.txt"
minigrep hello sample.txt sample2.txt
# Perform a case-sensitive search for the word "hello" in all the files in your current directory.
minigrep hello .
# Perform a case-insensitive search for the word "world" in the file "sample.txt"
minigrep world sample.txt -i
# Redirects the output to a new file. Error messages are not captured in the output file.
minigrep world sample.txt > output.txt
工作原理
程序使用以下组件
- run:负责根据提供的配置执行搜索的主要函数。
- search:在文件内容中对查询进行大小写敏感的搜索,返回包含行号和匹配行的元组的向量。正在使用的算法称为 Boyer Moore
- 时间复杂度:最坏情况 O(n * m) - 最好情况 O(m / n),其中 m 是
query
的长度,n 是contents
的长度 - 空间复杂度:O(k),其中
k
是用于存储匹配项的空间。
- 时间复杂度:最坏情况 O(n * m) - 最好情况 O(m / n),其中 m 是
- search_case_insensitive:类似于 search,但执行不区分大小写的搜索。
- Config:一个结构,用于存储查询、文件路径和表示是否应执行不区分大小写搜索的布尔标志。
- Config::build:根据提供的命令行参数构建配置。
程序利用多个线程进行并发文件处理,以提高在多个文件中搜索时的搜索速度。每个文件搜索操作都在自己的线程中运行。
运行测试
cargo test
注意事项
程序将在指定的文件中显示包含查询字符串的行及其行号。如果没有找到匹配的行,它将指示查询在文件中没有找到。