Skip to content

Latest commit

 

History

History
80 lines (53 loc) · 2.78 KB

README.zh.md

File metadata and controls

80 lines (53 loc) · 2.78 KB

grep

在文件中,搜索与正则表达式模式匹配的行。返回每个匹配行的行号和内容.

Unixgrep命令可用于搜索,与用户提供的搜索查询匹配的一个或多个文件中的行(称为模式).

grep命令有三个参数:

  1. 用于匹配文件中的行的模式.
  2. 零个或多个标志以自定义匹配行为.
  3. 一个或多个要搜索匹配行的文件.

你的任务是实现grep函数,应该读取指定文件的内容,找到与指定模式匹配的行,然后将这些行输出为单个字符串。请注意,行应按其找到的顺序输出,第一个文件中的第一个匹配行首先输出。

例如,假设有一个名为"input.txt"的文件,其中包含以下内容:

hello
world
hello again

如果我们打电话grep "hello" input.txt,返回的字符串应该是:

hello
hello again

如前所述,grep命令还应该支持以下标志:

  • -n打印每个匹配行的行号.
  • -l仅打印包含至少一个匹配行的文件的名称.
  • -i使用不区分大小写的比较匹配行.
  • -v反转程序 - 收集所有与模式不匹配的行.
  • -x仅匹配整行,而不是匹配包含匹配的行.

如果我们运行grep -n "hello" input.txt-nflag 将要求匹配的行以其行号作为前缀:

1:hello
3:hello again

如果我们运行grep -i "HELLO" input.txt,我们将做一个不区分大小写的匹配,输出将是:

hello
hello again

grep命令应该一次支持多个标志.

例如,运行grep -l -v "hello" file1.txt file2.txt应该打印不包含字符串"hello"的文件的名称.

错误处理

本练习介绍了该用法failure箱子,它为您提供了管理自定义错误类型的方法。要了解有关箱子的更多信息,请参阅failure 文档

补充阅读

虽然本练习要求您只实现最基本的grep函数,实际上是有一个完全的,重新实现的grepRust 项目 -ripgrep.

如果您喜欢在 Rust 中,重写基本工具程序的概念,请务必检查以下项目:

资源

与 Nate Foster 的对话.http://www.cs.cornell.edu/Courses/cs3110/2014sp/hw/0/ps0.pdf