См. Поиск IP-адреса для Vedran Sego . Я предполагаю, что вы не из Китая, поэтому мой первый шаг — отключить SSH
sudo -i
systmctl disable ssh
systemctl stop ssh
После этого проверьте время безотказной работы, не беспокоясь о захвате корневого доступа. Если время безотказной работы улучшается и вам требуется SSH, выполните шаги, противоположные описанным выше , после отключениякорневого доступа через SSH
.
В подобных случаях я обычно обманываю и добавляю :
в начале и в конце, поэтому удаляю особые случаи; соответствие теперь всегда для:a=foo:
Так:
sed -e 's/^/:/' -e 's/$/:/' -e 's/.*:di=\([^:]*\):.*/\1/'
Можно оптимизировать
sed -e 's/^\(.*\)$/:\1:/' -e 's/.*:di=\([^:]*\):.*/\1/'
Результаты:
% echo "di=a;b:*.di=c;d:ddi=e;f" | sed -e 's/^/:/' -e 's/$/:/' -e 's/.*:di=\([^:]*\):.*/\1/'
a;b
% echo "ddi=a;b:di=c;d:*.di=e;f" | sed -e 's/^/:/' -e 's/$/:/' -e 's/.*:di=\([^:]*\):.*/\1/'
c;d
echo "*.di=a;b:ddi=c;d:di=e;f" | sed -e 's/^/:/' -e 's/$/:/' -e 's/.*:di=\([^:]*\):.*/\1/'
e;f
Другой чит может состоять в том, чтобы преобразовать :
в новую строку, и тогда он всегда соответствует a=foo
без каких-либо:
tr : '\012' | sed -n 's/^di=//p'
Кроме того, это можно сделать так, как показано на рисунке. Транслитерировать все двоеточия на новые строки затем, непрерывно отключая ведущую пару KV, пока не появится di=.
{
echo "di=a;b:*.di=c;d:ddi=e;f"
echo "ddi=a;b:di=c;d:*.di=e;f"
echo "*.di=a;b:ddi=c;d:di=e;f"
} \
| sed -n 'y/:/\n/;/^di=/!D;P'
di=a;b
di=c;d
di=e;f
Использование awk
вместо sed
с :
и =
в качестве разделителей полей, просмотр каждой записи и печать следующего поля, если найдено поле, соответствующееdi
:
$ awk -F '[=:]' '{ for (i = 1; i < NF; ++i) if ($i == "di") { print $(i+1); next } }' file
a;b
c;d
e;f
Аналогично, но вместо этого используются :
, =
и новые строки в качестве разделителей записей:
$ awk -v RS='[=:\n]' '$0 == "di" { getline; print }' file
a;b
c;d
e;f
Это будет работать, только если ваш awk
обрабатывает многосимвольное -значение в RS
как регулярное выражение. Этот последний вариант также будет печатать каждое значениеdi
в каждой исходной строке, если таких значений больше одного. (первый вариант избегает этого, вызываяnext
).