Как выбрать первое вхождение между двумя шаблонами включая их

Если Вы хотите соединиться в режиме CLI, см. ответ jippie.

Если Вы хотите соединиться GUI, я рекомендую Вам смотреть к freenx. Это использует ssh в фоновом режиме.

27
23.01.2015, 18:13
8 ответов

Я изучаю электронику и у меня есть курс о RaspberryPi. В заметках говорится, что/etc означает «редактируемая конфигурация текста». Я всегда предполагал, что «каталог и так далее» - это не что иное, как прозвище. Это имеет больше смысла, чем другие пути вокруг, но кто я...

-121--1566-

Когда я беспокоюсь об этом, я запускаю sudo -k; sudo date & & sudo -n wooden-horse-command . Тогда мне будет предложено ввести пароль ровно один раз (к дате sudo ), и билет sudo должен быть обновлен для следующей команды.

Не то, чтобы это сильно набирает в плане безопасности, вы понимаете. Вредоносная программа, устанавливающая кейлоггер, будет эффективнее при захвате пароля, даже если он не запущен как root.

-121--65385-
sed '/P1/,/P2/!d;/P2/q'

... могли бы выполнить работу, вероятно, путем d удаления всех строк, которые делают ! не попадает в диапазон, то q используется при первом обнаружении конца диапазона. Это не приводит P2 неудаче для предыдущих P1, и не требует, чтобы GNU специфический синтаксис для записи просто.

23
27.01.2020, 19:39

У

awk '/P1/{a=1};a;/P2/{exit}' file
something P1 something
content1
content2
something P2 something
9
27.01.2020, 19:39

в SED :

sed -n '/P1/,/P2/p; /P2/q'
  • -N подавляет печать по умолчанию, и вы печатаете линии между подходящими диапазонами адресов с использованием P команда.
  • Обычно это будет соответствовать как разделами, поэтому вы выходите ( q ), когда первая P2 совпадает.

Это потерпит неудачу, если P2 наступает до P1 . Чтобы справиться с этим случаем, попробуйте:

sed -n '/P1/,/P2/{p; /P2/q}'
8
27.01.2020, 19:39

Если вы хотите пропустить сами паттерны, вот версия awk:

awk '/P2/ {exit} /P1/ {f=1; next} f' file
1
27.01.2020, 19:39

Более простое awkрешение (вида -промежуточного между ответ Ирувара и ответ Муру , но без использования переменной):

awk '/P1/,/P2/ { print }  /P2/ { exit }'

и, как заметил муру, если первый P2 появится перед первым P1, это ничего не напечатает.

Конечно, если вы хотите напечатать все диапазоны P1 -P2:

something P1 something
content1
content2
something P2 something
something P1 something
content3
content4
something P2 something

просто опустите часть exit:

awk '/P1/,/P2/ { print }'
1
27.01.2020, 19:39

Чтобы пропустить сами шаблоны и показать только первый соответствующий блок в одиночном GNU sed:

sed -nre '/STARTPATTERN/ {:a;n;/ENDPATTERN/{b;};p;ba}' file
0
27.01.2020, 19:39
awk '/P1/,/P2/{print;f=1} f&&/P2/{exit}' data

Выйти сразу после печати, а не до.

2
27.01.2020, 19:39
awk '/something P1/{f=1}/something P2/{f=0;print;exit}f'  file

выход

something P1 something
content1
content2
something P2 something
0
09.10.2021, 09:54

Теги

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