Я считаю, что они оба появились одновременно как часть ed
, или, возможно, QED
. Они довольно фундаментальны для использования ed
. Если бы когда-нибудь появилась версия, в которой не было бы ни того, ни другого, я не могу представить, как бы она функционировала.
g//
и //g
- это две совершенно разные вещи. И здесь на самом деле происходит несколько вещей.
//
предназначена для поиска следующей строки в файле, содержащей шаблон, она может вернуть только одну строку (обратите внимание, что 1,$/./
недействительна). g//
предназначен для поиска шаблона в нескольких строках, по умолчанию во всех или в указанном диапазоне. Может возвращать несколько строк. //g
само по себе бессмысленно и не является допустимой командой в ed
(хотя некоторые другие движки принимают его, функционально он все равно такой же, как //
). s//
предназначен для замены первого экземпляра шаблона в текущей (или указанной) строке (строках). s//g
- для замены всех экземпляров шаблона в текущей (или указанной) строке (строках). Я надеюсь, что это хотя бы немного прояснит путаницу. Но я думаю, что суть ответа на ваш вопрос в том, что это две разные вещи. Каждый из них используется по разным причинам и означает разные вещи.
vi вдохновлен ex, ex вдохновлен ed, ed вдохновлен qed
QED был взломан Ken Thompson еще в конце 1960-х годов для "Совместимой системы обмена временем" Массачусетского технологического института (предыдущая версия для системы обмена временем Беркли была создана Butler Lampson, L. Peter Deutsch, and Dana Angluin) - вкратце Томпсон добавил regex в qed (он сделал гораздо больше, но это выходит за рамки данного ответа. -- Bell Labs имеет больше информации об истории QED)
Одной из команд в qed была команда "G" или "Global". Она позволяла работать со всеми строками файла одновременно (предыдущие версии qed были ориентированы на символы, а не на строки. )
Grep на самом деле названа по одному из вариантов использования этой команды G/re/P (G
global, re
regular expression, P
print) В qed эта команда использовалась как G/bash/P
для распечатки всех строк, содержащих слово bash - позже это было включено в ed, затем была изъята из ed и сделана отдельной функцией (по словам Дага Макилроя, он попросил Кена сделать это для него, и Кен оставил это на столе на следующее утро)