Использование SED для вставки строки в строку в определенном месте

Не удаление пользователя вместе с пакетом является стандартом.

Томас уже дал хорошее объяснение в комментариях и дал ссылку на этот хороший документhttps://ma.ttias.be/on-removing-users-with-postun-in-rpm-spec-files/

Однако есть и другая причина. Многие администраторы полагаются на LDAP или NIS для обеспечения доступа пользователей к системе. И даже перед установкой пакета, создающего нового пользователя, они сначала добавят этого пользователя в свой LDAP. По этой причине новые пользователи создаются с помощью:

getent passwd USERNAME >/dev/null || \
    useradd -r -g GROUPNAME -d HOMEDIR -s /sbin/nologin...

т. е. перед созданием пользователя пакет всегда должен проверять, был ли уже создан пользователь.

И, конечно, вы просто не можете удалить пользователя LDAP из клиентской системы. Такой простой userdelможет, скорее всего, не сработать. Таким образом, администратор должен удалить пользователя -, используя инструменты, которые он использует для управления пользователями.

0
17.03.2021, 17:29
1 ответ

В GNU sedвставьте iи добавьте aкоманды, добавьте новых строк . Вы ищете замену строки в той же строке , поэтому вам нужна команда замены s.

Из инструкции:

i text

insert text before a line (alternative syntax).

a text

Appending text after a line. This is a GNU extension to the standard a command - see below for details.

Например

$ echo foo | sed ibar
bar
foo
$ echo foo | sed abar
foo
bar

Попробуйте что-нибудь подобное, предполагая, что строки всегда имеют один и тот же формат:

$ sed 's/+/+ip4:127.0.0.1 +/4' file
"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx +ip4:127.0.0.1 +include:spf.web-xxx.com ~all"

Находит 4-й плюс+

"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx +..."

и заменяет им знак плюс +и ip.

1
18.03.2021, 22:24

Теги

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