#文件搜索 #搜索查询 #文本搜索 #行号 #行搜索 #查询字符串 #字符串搜索

bin+lib minigrep_elijahkx

MiniGrep 是一个基于 Rust 的命令行工具,大小为 588KB,允许用户搜索文件中的给定查询字符串,并显示带有行号的匹配行

3 个版本

0.1.2 2023 年 11 月 30 日
0.1.1 2023 年 11 月 30 日
0.1.0 2023 年 11 月 30 日

#490 in 文本处理

MIT 许可证

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),其中 mquery 的长度,ncontents 的长度
    • 空间复杂度:O(k),其中 k 是用于存储匹配项的空间。
  • search_case_insensitive:类似于 search,但执行不区分大小写的搜索。
  • Config:一个结构,用于存储查询、文件路径和表示是否应执行不区分大小写搜索的布尔标志。
  • Config::build:根据提供的命令行参数构建配置。

程序利用多个线程进行并发文件处理,以提高在多个文件中搜索时的搜索速度。每个文件搜索操作都在自己的线程中运行。

运行测试

cargo test

注意事项

程序将在指定的文件中显示包含查询字符串的行及其行号。如果没有找到匹配的行,它将指示查询在文件中没有找到。

Boyer Moore

Boyer Moore

Boyer-Moore

无运行时依赖