gpt4 book ai didi

c - grep 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 16:33:06 25 4
gpt4 key购买 nike

我正在尝试了解 grep 的工作原理。

当我说 grep "hello"*.* 时,grep 是否得到 2 个参数 — (1) 要搜索的字符串,即 "hello"和 (2) 路径*.*?或者 shell 是否将 *.* 转换成 grep 可以理解的东西?

我在哪里可以获得grep的源代码?我遇到了这个 GNU grep关联。其中一个 README 文件说它不同于 unix grep。怎么会这样?

我想查看 FreeBSD 版本的 grep 和它的 Linux 版本的源代码(如果它们不同的话)。

最佳答案

grep 的强大之处在于自动机理论的魔力。 GREP 是 Global Regular Expression Print 的缩写。它通过构建一个自动机(一个非常简单的“虚拟机”:不是图灵完备)来工作;然后它针对输入流“执行”自动机。

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

编辑:看来我没有仔细阅读问题。

当您键入命令行时,它首先由 shell 进行预处理。 shell 执行别名替换和文件名通配。在替换别名(它们就像宏)之后,shell 将命令行分割成一个参数列表(以空格分隔)。此参数列表作为整数计数(通常称为 argc)和指向以 NULL 结尾的 ((void *)0) 以 nul 结尾的 ('\0') 字符数组数组。

各个命令可以根据需要使用它们的参数。但是如果给定 -h 参数,大多数 Unix 程序将打印一条友好的帮助消息(因为它以减号开头,所以称为选项)。 GNU 软件还将接受“长格式”选项 --help

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

关于c - grep 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com