grep 是如何工作的?

2024-02-27

我想了解如何grep works.

当我说grep "hello" *.*, does grep获取 2 个参数 — (1) 要搜索的字符串,即“hello”和 (2) 路径*.*?或者shell是否转换*.*变成某事grep可以理解?

哪里可以得到源代码grep?我遇到了这个GNU grep http://www.gnu.org/s/grep/devel.html关联。自述文件之一说它不同于unix grep。为何如此?

我想看看 FreeBSD 版本的源码grep以及它的 Linux 版本(如果它们不同)。


的力量grep这就是自动机理论的魔力。 GREP 是全局正则表达式打印的缩写。它的工作原理是构建一个自动机(一个非常简单的“虚拟机”:不是图灵完备);然后它针对输入流“执行”自动机。

自动机是节点或状态的图或网络。状态之间的转换由受审查的输入字符决定。特殊的自动机,例如+ and *通过循环回到自身的转换来工作。字符类如[a-z]由扇形表示:一个起始节点,每个角色都有分支到“辐条”;通常,辐条有一个特殊的“epsilon 转换”到单个最终状态,因此它可以与从正则表达式(搜索字符串)构建的下一个自动机链接起来。 epsilon 转换允许在不向前搜索字符串的情况下改变状态。

Edit:看来我没有仔细阅读这个问题。

当您键入命令行时,它首先由 shell 进行预处理。 shell 执行别名替换和文件名匹配。替换别名(它们就像宏)后,shell 将命令行分成参数列表(以空格分隔)。该参数列表被传递给main()可执行命令程序的函数作为整数计数(通常称为 argc)和指向 NULL 终止的指针((void *)0) 以 null 结尾的数组 ('\0') 字符数组。

各个命令可以按照自己的意愿使用它们的参数。但如果给出以下命令,大多数 Unix 程序都会打印一条友好的帮助消息-h参数(因为它以减号开头,所以称为选项)。 GNU 软件还将接受“长格式”选项--help.

由于不同版本的 Unix 程序之间存在很大差异,因此发现程序所需的确切语法的最可靠方法是询问程序本身。如果这没有告诉你你需要什么(或者它太神秘而难以理解),你接下来应该检查local联机帮助页(man grep)。对于 gnu 软件,您通常可以从以下位置获得更多信息info grep.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grep 是如何工作的? 的相关文章

随机推荐

  • 为 Databricks 生成数据库架构图

    我正在创建一个 Databricks 应用程序 并且数据库架构变得非常重要 有没有办法为 Databricks 数据库生成架构图 类似于可以从 mysql 生成的架构图 有两种可能的变体 使用 Spark SQL 与show databas
  • 将 C/C++ 回调传递到 matlab 引擎

    我有一个 C 文件 启动 matlab 引擎 calls matlab optimize 一个编译后的 m 文件 在内部运行 matlab 优化器之一 打印结果 停止发动机并退出 这很好用 我现在想将第二行更改为 calls matlab
  • Xcode 文档图标未更新

    我创建了一个 icns并在我的项目的 文档类型 部分中进行设置 但 Finder 中的文档图标仍然是通用的 我注意到 如果更改文档类型的文件扩展名 则会显示该图标 是否有我需要清除的缓存或其他方式来更新图标而不更改文件扩展名 要强制刷新图标
  • Sequelize 同步与迁移

    我正在学习 Sequelize 我想了解一些有关同步与迁移的说明 我知道同步将根据我的模型架构创建丢失的表 但我还读到同步用于初始化数据库 而迁移用于生产 如果是这种情况 express example 显示调用同步来自bin www ht
  • 在哪里可以获得 MediaWiki 的模板?

    我注意到很多基于 mediawiki 的网站都使用 Robelbox Ambox 等模板 我在哪里可以获得它们以及如何安装它们 It s a PITA http www urbandictionary com define php term
  • 为什么 Python 的 lambda 表达式中不允许赋值?

    这不是重复的Python 中 lambda 表达式内的赋值 https stackoverflow com questions 6282042 assignment inside lambda expression in python 即我
  • 如何在 JavaFX2 中的任务之间重置进度指示器?

    我的主屏幕 UI 上有一个进度指示器 由各种选项卡和服务共享 每个 TabController 都有自己的 Service 实例 在我的 MainController 类中 对于每个选项卡 我已将每个服务的进度属性绑定到 ProgressI
  • 通过 Kivy 在 Android 上运行 Tensorflow

    I found 这个答案 https stackoverflow com a 34495029 828184这让我想到了一个想法 你可以在 Android 手机上使用 kivy 而不是使用编译后的张量流图 这样你就可以使用直接与张量流图对话
  • 将数组中的相同值分组

    我有一个数组 里面有一些值 我希望返回另一个数组 该数组的值分组到自己的数组中 所以我想要达到的结果是这样的 var arr 1 1 2 2 2 3 3 4 4 4 4 5 6 var groupedArr 1 1 2 2 2 3 3 4
  • Xamarin.Android 中的测试活动

    我想对活动生命周期的一些交互进行单元测试 我正在开发一个数据绑定库 没有它就无法进行单元测试 安卓也有一些不错的文档 http developer android com tools testing activity testing htm
  • “代码生成器已取消优化 [某些文件] 的样式,因为它超过了最大值“100KB””是什么意思?

    我向我的项目添加了一个新的 npm 包 并在我的一个模块中需要它 现在我从 webpack 收到这条消息 build modulesNote The code generator has deoptimised the styling of
  • SSRS 选择性分页符

    我正在处理的有关财产记录的当前报告在 SSRS 中遇到一些格式问题 我的报告由 6 个在横向视图中对齐的 tablixes 构建而成 旨在保留特定的布局以供潜在的报告打印 第一个 Tablix 包含有关相关财产和所有者的一般信息 该信息将是
  • 如何以编程方式选择 MKUserLocation?

    标题和副标题可以添加到 iOS 显示的用户位置MK用户位置 https stackoverflow com questions 6400880 on mkuserlocation how do i show my own custom me
  • 如何重置向南迁移以捕获 django 模型的当前状态

    我有一个应用程序 目前有 35 次向南迁移 在设置新部署时 我们经常创建新部署 这些需要一段时间才能完成 并且应用程序正在不断发展 添加更多迁移 此外 迁移还包括一些潜在的复杂数据迁移和一些破坏 SQLite3 的自定义迁移 目前这不是一个
  • 像 Instagram 一样带有圆角的文本背景

    我想像 Instagram 一样创建具有背景颜色和圆角的文本 我能够实现背景颜色 但无法创建圆角 到目前为止我所拥有的 下面是上面截图的源代码 void createBackgroundColor self txtView layoutMa
  • CoffeeScript - 编译当前目录和所有子目录中的所有 .coffee 文件

    编译当前目录和所有子目录中的所有 coffee 文件的最简单方法是什么 您可以使用集成的coffee外壳工具 coffee output lib compile src 编译 coffee 文件的目录树src到 js 文件的并行树中lib
  • CMake 行为:使用 Visual Studio 的自定义配置类型需要多次运行 cmake 才能正确显示。这是故意的吗?

    Context 我正在将一个项目从普通 Makefile 迁移到 CMake 以添加对多个编译器 gfortran ifort 和操作系统 Windows Linux 的支持 当我完成整个事情时 我正在尝试简化 CMake 行为并为用户提供
  • 在 data.table 中插入一行

    如果我有一个数据框 set seed 12345 df data frame a rnorm 5 b rnorm 5 我可以通过例如添加一行 df 6 c 5 6 如果我现在在 data table 中执行相同的操作 library dat
  • Google Developers Console API 页面未加载

    在我的 Google 开发者控制台中 我无法打开 API 页面 它显示无法加载错误 并且如果我通过像 https cloud google com compute docs autoscaler loadbalancingsetup htt
  • grep 是如何工作的?

    我想了解如何grep works 当我说grep hello does grep获取 2 个参数 1 要搜索的字符串 即 hello 和 2 路径 或者shell是否转换 变成某事grep可以理解 哪里可以得到源代码grep 我遇到了这个G