澄清一下,这不是关于插入符号 (^) 或美元符号 ($) 在正则表达式中的作用的问题。
在具有 QWERTY 布局的现代键盘中,^
出现在后面$
(即^
出现在数字 6$
上方和4 上方),所以当我使用它们时,我总是有一段时间的手眼不协调,比如^foobar$
.
所以我很好奇,为什么从历史上看,为什么选择插入符号和美元符号来匹配行的开头/结尾,因为如果将它们颠倒过来会更直观。
也许他们当时有不同的键盘布局?显然,在 vi 中选择 ESC 来改变模式的原因是它对 Bill Joy 的键盘有意义:为什么 vim 使用 hjkl 键作为箭头键。
Bash“globbing”和正则表达式不相同是否有历史原因?例如,我相信在 Bash 中[1-2]*
匹配任何以 1 或 2 开头的任何内容,然后是其他任何内容,而正则表达式[1-2]*
只会匹配 1 和 2 的序列。我的 Bash 脚本和 REGEX foo 都很弱,我经常遇到与这些差异相关的问题,这让我很好奇它们为什么不同。
我认为可能是qed
,但我找不到任何来源来证实或否认这一点。
此外,ed
它存在于 Unix 的整个时期,并sam
于 1980 年代初编写。是否知道从 Unix 时代到 Plan9 的贝尔实验室大多数人使用的是什么?
我在想时间线是这样的:
qed
-> ed
-> sam
->acme
该g
选项(例如s/pattern/replacement/g
对于许多工具使用正则表达式风格的模式匹配和):g
的命令ed
,ex
,vi
,并vim
有相当类似的使用和意义:匹配给定的正则表达式“全球”,即第一比赛结束后不停止。
我对此有两个问题:
:g
命令还是g
模式匹配标志,在哪个工具中?看起来大多数在模式匹配中sed
使用g
标志的工具(例如)实际上只是直接或间接模拟ed
。例如,在后 Perl 时代,大多数使用正则表达式的工具都允许g
标记,因为 Perl允许,而 Perl 会出现,因为ed
-> sed
-> Perl
。因此,如果答案是“它们是在原始ed
工具中同时引入的,并且除此之外没有历史先例”,我也不会感到惊讶。global
选项(或命令)?它真的没有什么“全球性”的;该:g
命令与任何其他ed
命令一样采用一系列行,并且该g
标志不会以任何方式扩展搜索范围(它只允许多次点击)。我想我想不出更好的名字,但所选的名字对我来说似乎很奇怪,所以我想知道是否有一些我没有看到的原因。