С awk
+tac
:
tac file | awk -v delim="--split page here--" '{
if (nextnr=="" && $1~/^[0-9]+$/ && $0==" "$1) {
nextnr=NR+9 # pagenr found, remember next position
}
else if (NR==nextnr) {
$0=delim # overwrite line with delimiter
nextnr="" # reset
}
print
}' | tac
Сначала переверните файл с помощью tac
, чтобы мы могли искать сверху -вниз номер страницы и вставлять разделитель.
Поиск начинается в предложении if -, когда выполняются эти условия.:
nextnr
равно (изначально )не установлено(nextnr==""
). Это переменная, содержащая номер строки следующего разделителя.$1~/^[0-9]+$/
)Если все три условия истинны, nextnr
устанавливается на текущий номер строки (количество записей)NR + 9
.
Если текущая строка является строкой разделителя (NR==nextnr
), перезапишите строку разделителем и сбросьте nextnr
.
Последняя строка скрипта выводит текущую строку (оригинала или перезаписывает разделитель ).
На последнем шаге выход снова реверсируется с помощью tac
.
IIRC, наличие «*
» в поле пароля в /etc/shadow
будет работать. Обязательно отредактируйте этот файл вручную, потому что вам может понадобиться исправить контекст SELinux и т. д.
Редактировать :Вы можете сделать такой пароль, который никто никогда не узнает. Затем пользователь не может войти в систему, а только переключается с помощьюsudo
:
dd if=/dev/random bs=1 count=64 | md5sum | awk '{print $1}{print $1}' | passwd user