Подход grep(требуется поддержка PCRE):
s="This is a test some stuff I want string junk string end"
grep -Po 'te.*?ng' <<< $s
Альтернативный подходperl :
perl -ne 'print "$&\n" if /te.*?ng/' <<< $s
Вывод (для обоих подходов):
test some stuff I want string
.*?
- ?
вот нежадныймодификатор, указывает соответствие в минимальном модеRCS предшествует Linux, поддерживает несколько -изменение строки -комментарии (Я использую эту функцию с 1988 года ). CVS унаследовал это от RCS. rcs2log существует с 1992 года и отображает журналы RCS --, включая многострочные комментарии.
RCSci
запрашивает комментарий к изменению -с нулем или более строк, заканчивающихся строкой, содержащей только.
(например mail ). Я использую rcs2log с 2003 года для форматирования журналов RCS в удобочитаемые журналы изменений, такие как дляded
.
Между прочим, SCCS также поддерживает многострочные -комментарии, но я нашел его менее удобным для пользователя -в этом отношении, когда начал использовать его в начале 1986 г. (см. обсуждение).
Одним из аспектов комментариев с несколькими -сменами строк -, который, по-видимому, был упущен из виду, является ввод их и, возможно, исправление их. Самая старая версия CVS, которую вы можете найти (1.3 в апреле 1992 года ), использовала для этой цели текстовый редактор.Эта функция присутствует во всех последующих выпусках CVS. Вы можете просмотреть исходники здесь или получить -копию только для чтения . Похоже, репозиторий начинается в конце ноября 1994 года, то есть между версиями 1.3 и 1.4 (1.5 была выпущена в июле 1995 года ). Чтобы увидеть 1.3, вам нужно получить архив.
Линус, безусловно, знал об этом, потому что первый запрос, отраженный в истории изменений -BitKeeper, относился к этой функции :
.commit e1dc29195bd72a9a4c8f1e817e08b8c0358ee88b
Author: Larry McVoy <lm@bitkeeper.com>
Date: Thu Jan 31 23:29:46 2002 -0800
Add a bk comment interface so that Linus can edit the comments after
the fact.
bk: 3c5a43eabhI7oSce6C4ms5U-kIcEv
Чтобы увидеть, что было реализовано, вы можете прочитать исходный -код . Вот небольшая часть изменения, произошедшего примерно месяц спустя (это изменение -комментарий намекает на то, что первоначальное решение было неудовлетворительным):
+/* + * Prompt the user with a set of comments, returning + * 0 if they want to use them, + * -1 for an error or an abort. + */ +int +comments_prompt(char *file) +{ + char buf[10]; + extern char *editor; + + unless (editor || (editor = getenv("EDITOR"))) editor = "vi"; + while (1) { + printf("\n-------------------------------------------------\n"); + fflush(stdout); + if (cat(file)) return (-1); + printf("-------------------------------------------------\n"); + printf("Use these comments: (e)dit, (a)bort, (u)se? ");
Опять же, вопрос опроисхождении. Я помню, что DEC CMS (, предшествующая CVS 1.3 ), предоставляла свою информацию в полноэкранном -экранном (режиме терминала ). Я использовал это в период времени 1988 -1989. Тем не менее, происхождение Git связано с CVS, а CVS, в свою очередь, может быть оригинальным (в том смысле, что на него не повлияло воздействие более ранних инструментов ), а может и нет.