Я изучаю электронику и у меня есть курс о 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 специфический синтаксис для записи просто.
У
awk '/P1/{a=1};a;/P2/{exit}' file
something P1 something
content1
content2
something P2 something
в SED
:
sed -n '/P1/,/P2/p; /P2/q'
-N
подавляет печать по умолчанию, и вы печатаете линии между подходящими диапазонами адресов с использованием P
команда. q
), когда первая P2
совпадает. Это потерпит неудачу, если P2
наступает до P1
. Чтобы справиться с этим случаем, попробуйте:
sed -n '/P1/,/P2/{p; /P2/q}'
Если вы хотите пропустить сами паттерны, вот версия awk
:
awk '/P2/ {exit} /P1/ {f=1; next} f' file
Более простое 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 }'
Чтобы пропустить сами шаблоны и показать только первый соответствующий блок в одиночном GNU sed:
sed -nre '/STARTPATTERN/ {:a;n;/ENDPATTERN/{b;};p;ba}' file
awk '/P1/,/P2/{print;f=1} f&&/P2/{exit}' data
Выйти сразу после печати, а не до.
awk '/something P1/{f=1}/something P2/{f=0;print;exit}f' file
выход
something P1 something
content1
content2
something P2 something