GNU grep имеет -P
опция для perl-стиля regexes, и -o
опция распечатать только, что соответствует шаблону. Они могут быть объединены с помощью, осматривают утверждения (описанный под Расширенными Шаблонами в perlre странице справочника) для удаления части grep шаблона от того, что полно решимости соответствовать в целях -o
.
$ grep -oP 'foobar \K\w+' test.txt
bash
happy
$
\K
краткая форма (и более эффективная форма) (?<=pattern)
который Вы используете в качестве нулевой ширины, оглядываются утверждение перед текстом, который Вы хотите произвести. (?=pattern)
может использоваться в качестве утверждения предвидения нулевой ширины после текста, который Вы хотите произвести.
Например, если Вы хотели распознать слово между foo
и bar
, Вы могли использовать:
$ grep -oP 'foo \K\w+(?= bar)' test.txt
или (для симметрии)
$ grep -oP '(?<=foo )\w+(?= bar)' test.txt
Ctrl-Q
Отключить это в целом, палку stty -ixon
в сценарии запуска. Чтобы позволить любому ключу получать вещи, текущие снова, использовать stty ixany
.
PS: Это ни терминал, ни оболочка, которая делает это, но терминальный драйвер ОС.
Ctrl-Q является действительно ответом. Я думал, что брошу в небольшой истории этого, которое слишком длинно для помещений в поля корректного ответа ak2.
Назад в средневековье, терминал был большим элементом оборудования, который соединился с удаленным устройством (первоначально другой терминал, потому что телетайпы было настолько легче учиться работать, чем телеграфный ключ) по длинному проводу или через телефонные линии с модемами. К тому времени, когда Unix разрабатывал, код ASCII был уже хорошо установлен (хотя конкурирующий код EBCDIC от IBM был все еще силой, с которой будут считаться).
Самые ранние терминалы вели печатный учет каждого полученного символа. Пока символы прибыли не быстрее, чем печатающая головка могла ввести их, по крайней мере. Но как только основанные на CRT терминалы были возможны, проблема возникла, которому только приблизительно 25 строк соответствуют на CRT, и 25 строк 80 символов представили достаточно RAM, что никакая мысль серьезно об обеспечении большего количества RAM для символов, которые прокрутили от вершины экрана.
Таким образом, некоторая конвенция была необходима, чтобы сигнализировать, что передающий конец должен приостановиться, чтобы позволить читателю нагнать.
7-разрядный код ASCII имеет 33 кодовых точки, посвященные управляющим символам (от 0 до 31 и 127). Некоторые из тех действительно хорошо установили цели, такой как NUL
(начальный участок магнитной ленты чистого листа для поточной обработки, разрывов и соединений встык), DEL
("вычеркнутые" символы на перфоленте, обозначенной путем перфорации всех семи дыр), BEL
(звените!), CR
, LF
, и TAB
. Но четыре были определены явно для управления самим оконечным устройством (DC1
кому: DC4
иначе Ctrl+Q, Ctrl+R, Ctrl+S и Ctrl+T).
Мое лучшее предположение - то, что некоторый инженер думал, что (как мнемоника идут), "S" для "Остановки" и "Q" для "Продолжаются", не были слишком плохи, и присвоился DC3
для значения, "прекратите отправлять" и DC1
для значения "хорошо продолжите отправлять теперь".
Даже та конвенция была уже хорошо установлена к тому времени, когда Unix оставлял вложенное множество в Bell Labs для выхода в мир.
Конвенция известна как программное управление потоком и чрезвычайно распространена в реальных последовательных устройствах. Не легко реализовать правильно, поскольку это предотвращает использование любого из тех символов для любой другой цели в канале передачи, и Стоповый сигнал должен быть обработан перед полученными символами любого ожидания, чтобы не отправлять больше, чем принимающий конец может обработать.
Если практично, использование дополнительных сигналов из полосы от потока последовательных данных для управления потоком значительно предпочтено. На непосредственно проводных соединениях, которые могут позволить себе дополнительные сигнальные провода, Вы найдете аппаратное квитирование используемым, который освобождает те символы для другого использования.
Конечно, сегодняшнее окно терминала не использует фактический физический последовательный порт, имеет полосы прокрутки и действительно не нуждается в программном квитировании вообще. Но конвенция сохраняется.
Я вспоминаю заявление, что Richard Stallman получил жалобы на свое отображение Ctrl+S к возрастающему поиску в первых выпусках emacs, и что он был довольно неприятен любому пользователю, который должен был зависеть от управляемого соединения потока 7-разрядного, программного обеспечения.
Клавиши управления :выполняют специальные функции в Shell
Ctrl-C
; это работает, также? (И в другом месте, они предложилиCtrl-Q
, так же, как Вы.) – imz -- Ivan Zakharyaschev 27.04.2011, 15:41stty
.) – ak2 27.04.2011, 16:10Ctrl-S
и затемCtrl-Q
возобновиться. – sashoalm 16.01.2014, 10:44