Вы тестировали adduser temipuser
вместо useradd temipuser
???
руководство Linux для сказанного sshd_conf:
AllowUsers
This keyword can be followed by a list of user name patterns, separated by
spaces. If specified, login is allowed only for user names that match one of the
patterns. Only user names are valid; a numerical user ID is not recognized. **By
default, login is allowed for all users.** If the pattern takes the form USER@HOST
then USER and HOST are separately checked, restricting logins to particular users
from particular hosts. The allow/deny directives are processed in the following
order: DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.
Таким образом, Вы не должны добавлять AllowUsers и если Вы добавляете эту опцию, я не думаю, что это предотвращает от удаленного корневого входа в систему при включении PermitRootLogin
Я думаю, что вы могли бы сделать что-нибудь наподобие
grep -zPo '.*a(?s)(?(?!a).)*?xyz' file
(с GNU grep), если ваша версия достаточно свежая для поддержки расширения PCRE) или
pcregrep -Mo '.*a(?s)(?(?!a).)*?xyz' file
Если вы хотите найти совпадение со второй инстанцией xyz
в ваших выходных данных, сделайте это совпадение жадным, удалив финальную ?
, например, grep -zPo '.*a(?s)(?(?!a).)*xyz' file
.
Возможно, лучшим тестом является такой, с многосимвольными шаблонами как для условия старта, так и для условия стопа; учитывая
$ cat file
1 abc
2 abc
3 abc
4 abc
5 abc
6 bbc
7 cbc
8 dbc
9 xyz
10 xyz
11 abc
12 abc
затем
$ grep -zPo '.*abc(?s)(?(?!abc).)*?xyz' file
5 abc
6 bbc
7 cbc
8 dbc
9 xyz
Если вас не волнуют пустые строки в выводе, попробуйте:
$ awk '
!NF { next }
/a/ { flag = 1; last = $0; next }
last && flag { print last; print; last = 0; next}
/xyz/ { print; flag = 0; next}
flag
' file
5 a
6 b
7 c
8 d
9 xyz
10 xyz
Вот решение на Perl:
perl -nlE '
if (/a/) { @buffer = ($_) }
elsif (/xyz/) { push @buffer,$_; say for @buffer }
else { push @buffer,$_}
' your_file
Как это работает
Он читает файл построчно и выполняет одно из трех действий:
a
, она присваивает текущую строку массиву @buffer
. xyz
, она помещает текущую строку в буфер и печатает его содержимое. @buffer
. Таким образом, всякий раз, когда новая строка соответствует шаблону a
, содержимое @buffer
стирается и заменяется только текущей строкой. Это гарантирует, что вы найдете ближайший a
, предшествующий xyz
.
Вы, конечно, должны заменить регулярные выражения, которые я использовал, на настоящие регулярные выражения, относящиеся к вашему случаю.
tac file | sed '/xyz/,/a/!d' | tac
(если у вас нет -так
, ваша команда -хвост
может иметь команду -r
, чтобы сделать то же самое).