在文件中,搜索与正则表达式模式匹配的行。返回每个匹配行的行号和内容.
Unixgrep
命令可用于搜索,与用户提供的搜索查询匹配的一个或多个文件中的行(称为模式).
该grep
命令有三个参数:
- 用于匹配文件中的行的模式.
- 零个或多个标志以自定义匹配行为.
- 一个或多个要搜索匹配行的文件.
你的任务是实现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
,-n
flag 将要求匹配的行以其行号作为前缀:
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
函数,实际上是有一个完全的,重新实现的grep
Rust 项目 -ripgrep.
如果您喜欢在 Rust 中,重写基本工具程序的概念,请务必检查以下项目:
与 Nate Foster 的对话.http://www.cs.cornell.edu/Courses/cs3110/2014sp/hw/0/ps0.pdf