我想了解如何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(使用前将#替换为@)