Регулярное выражение для захвата пустого значения ключа

Обратите внимание, что «неубиваемые» процессы bash запускаются от имени пользователяp:

user    6174  0.0  0.0  13016    28 pts/19   Ss+  Feb13   0:04 /bin/bash
p        10964  0.0  0.0  11700    28 pts/2    Ss+  Feb11   0:01 bash 
p        11126  0.0  0.0   7952   560 pts/3    Ss+  Feb11   0:00 bash 
user   18195  0.0  0.0  17320   344 pts/9    Ss+  Apr22   0:29 /bin/bash

Вы работаете как пользователь user, поэтому вы не можете просто убить какие-либо процессы пользователя p.

Если у вас есть доступ sudo, вы можете выполнять команды уничтожения либо как root, либо как пользователь p. Для вещей, которые могут быть старыми пользовательскими сеансами, использование kill -HUPбыло бы лучше, чем просто kill, поскольку это позволяет таким вещам, как редакторы, сохранять резервную копию любой несохраненной работы перед выходом. Кроме того, интерактивные процессы оболочки (, т. е. старые сеансы ), могут быть невосприимчивы к обычным kill, но kill -HUPдля них отлично работает.

Выполнить команду kill от имени пользователяp:

user$ sudo -u p kill -HUP 10964 11126

или с помощью root power:

user$ sudo kill -HUP 10964 11126

Для процессов, запущенных от имени пользователя p, команда kill, отданная от имени пользователя p, будет столь же сильной, как и команда kill, отданная пользователем root :даже обычные пользователи имеют полную власть над жизнью и смертью любого процесса они владеют собой.

1
09.04.2021, 23:25
2 ответа

Используя sedи предполагая, что вам не нужен первый пробел после::

sed '/^comment/!d; s/[^:]*:[[:blank:]]//' file

или, только с одним оператором редактирования,

sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file

Думаю, в Python это выглядело бы так

^comment[[:blank:]]*:[[:blank:]](.*)

или, возможно,

^comment\s*:\s(.*)

если Python не понимает классы символов POSIX.

Бит [[:blank:]]*соответствует любому набору пробелов или символов табуляции. Шаблон \sбольше похож на класс символов POSIX [[:space:]], который соответствует более широкому массиву символов пробела -, включая символы новой строки.


Проблема с вашим выражением заключается в том, что вы сопоставляете весь документ в строке, а выражение в Python (, которое, я полагаю, вы используете ), \sсоответствует встроенным символам новой строки в строке (строка, представляющая собой весь документ ). Таким образом, выражение захватывает все, начиная с первого не -пробела (новых строк, включая ), не -*, не -:(, оба :и *являются буквальными в пределах [...]), символ, который pв probeна следующей строке до следующей новой строки.

3
28.04.2021, 22:53

Вы также можете сделать это следующим образом:

'^comment[\s*:]*(\S+| +)$'

Изменено .*на \S+, так что мы либо сопоставляем любые непробельные символы, либо пробелы (, описанные ниже ), за которыми следует конец строки, или пробелы, за которыми следует конец строки.

| +)также должно соответствовать любому количеству пробелов (одному или нескольким )в наборе.

Ожидается, что за набором последует конец строки, чтобы зафиксировать этот сценарий, который вы испытываете

Вот скриншот, иллюстрирующий регулярное выражение, соответствующее условиям:

enter image description here

1
28.04.2021, 22:53

Теги

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