Regex '/pattern/g' и редактор ':g/pattern / ': который был на первом месте, и почему 'g'?

Использовать find.

find / -gid 510 -exec chgrp staff {} +
7
29.07.2014, 18:15
2 ответа

Я считаю, что они оба появились одновременно как часть ed, или, возможно, QED. Они довольно фундаментальны для использования ed. Если бы когда-нибудь появилась версия, в которой не было бы ни того, ни другого, я не могу представить, как бы она функционировала.

g// и //g - это две совершенно разные вещи. И здесь на самом деле происходит несколько вещей.

  • // предназначена для поиска следующей строки в файле, содержащей шаблон, она может вернуть только одну строку (обратите внимание, что 1,$/./ недействительна).
  • g// предназначен для поиска шаблона в нескольких строках, по умолчанию во всех или в указанном диапазоне. Может возвращать несколько строк.
  • //g само по себе бессмысленно и не является допустимой командой в ed (хотя некоторые другие движки принимают его, функционально он все равно такой же, как //).
  • s// предназначен для замены первого экземпляра шаблона в текущей (или указанной) строке (строках).
  • s//g - для замены всех экземпляров шаблона в текущей (или указанной) строке (строках).

Я надеюсь, что это хотя бы немного прояснит путаницу. Но я думаю, что суть ответа на ваш вопрос в том, что это две разные вещи. Каждый из них используется по разным причинам и означает разные вещи.

4
27.01.2020, 20:17

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 и сделана отдельной функцией (по словам Дага Макилроя, он попросил Кена сделать это для него, и Кен оставил это на столе на следующее утро)

6
27.01.2020, 20:17

Теги

Похожие вопросы