C# Grep 应用程序






4.80/5 (10投票s)
介绍一个小的 C# 应用程序,它在 .NET 下提供类似 Grep 的功能。
本文根据读者提供的建议进行了更新。
传统上,grep 代表 "全局正则表达式打印"。全局意味着搜索整个文件。正则表达式意味着使用正则表达式字符串来建立搜索模式。打印意味着将显示结果。简单来说,grep 会搜索整个文件以查找您想要的模式并显示其结果。
现在提供了 C# Grep 应用程序 的两个变体:Windows Form 变体和 Console 变体。
  
 
Windows Form 变体通过添加新的搜索选项、提供正则表达式搜索功能以及在单独的线程中实现搜索过程进行了改进。 该应用程序可用于在给定类型的文本文件中搜索给定的正则表达式。 可以选择以下用户选项
- Count Lines- 打印每个输入文件的匹配行数;
- Ignore Case- 在模式(搜索表达式)中忽略大小写;
- Just Files- 仅打印文件名(将在文件中首次匹配时停止扫描);
- Line Numbers- 在输出的每一行前面加上行号;
- Recursive- 在子目录中进行递归搜索;
结果将根据所选选项打印在多行 Edit BOx 中。 搜索结果可以通过右键单击 Edit Box 并从上下文菜单中选择 Copy 从 Edit Box 复制到 Clipboard。 这些文件在给定的目录中搜索,或者从其子目录中递归搜索(如果选择了 Recursive 选项)。 为了指定搜索目录和文件扩展名,您可以手动编辑,或者可以从打开文件对话框中选择一个文件,目录和文件扩展名将自动添加。 您可以通过用逗号分隔它们来指定多个文件扩展名或模式。
 
 
Console 变体使用的语法与传统的 Unix 语法不同,我更喜欢类似于 csc(C# 编译器)的语法。
grep [/h|/H] grep [/c] [/i] [/l] [/n] [/r] /E:reg_exp /F:files
命令行选项与 Windows Form 变体的选项类似
- /h|/H- 打印使用帮助说明文本;
- /c- 打印每个输入文件的匹配行数;
- /i- 忽略模式中的大小写;
- /l- 仅打印文件(扫描将在第一次匹配时停止);
- /n- 在输出的每一行前面加上行号;
- /r- 在子目录中进行递归搜索;
- /E:reg_exp- 用作搜索模式的正则表达式。 如果您想在其中包含前导或尾随空格,正则表达式可以用引号(例如 "..." 和 '...')分隔;
- /F:files- 输入文件列表。 文件可以用逗号分隔,如- /F:file1,file2,file3,并且可以在其规范中使用通配符,如- /F:*file?.txt;
示例
grep /c /n /r /E:" C Sharp " /F:*.cs
对于解析命令行参数,我使用了由作者 GriffonRL 在 Code Project 文章 C#/.NET 命令行参数解析器 中提供的 Arguments 类的稍作修改的版本。 修改只是将 StringDictionary 容器替换为 HybridDictionary 容器,以允许区分大小写的键。 完整的信用归于源代码中的原始作者。
完全可操作的 Visual Studio.NET 项目在附加到文章的 .zip 文件中提供。 我在代码中添加了一些注释,但总的来说它是不言自明的。
我对用 C# 开发这些应用程序是多么容易,以及与我选择另一种编程语言和技术的情况相比,最终的源文件是多么短感到非常惊讶。 我希望这个例子能激励其他人学习 C# 和 .NET 技术!
我对这个实现的任何意见和新想法都感兴趣!


