sed "
/^admin::common::passwords:$/,/^[^ ].*:$/ {
/^ $ACCOUNT:$/ {
N;d
}
}" < "$YAML"
Ou seja, inclua sua sub-rotina de exclusão em uma seção que corresponda entre admin::common...
e a próxima whatever-section:
.
Tenha em atenção que o carácter .
, comum nos nomes de utilizador, também é um operador de expressão regular, pelo que john.doe
corresponderia a john.doe
, mas também johnWdoe
, por exemplo.
Observe que o acima não funcionará se você tiver duas seções admin::common::passwords
consecutivas e a conta a ser excluída estiver na segunda.
Se, como Otheus indica , as seções são executadas até que a próxima linha tenha a mesma ou menor quantidade de caracteres de espaço à esquerda e sua seção admin::common::passwords:
possa ter alguns espaços à esquerda, então provavelmente é hora de mudar para outro idioma como awk
:
awk -v account="$ACCOUNT" '
match($0, /[^ ]/) && RSTART <= n {n = 0}
n && NF == 1 && $1 == account ":" {getline; next}
!n && /^ *admin::common::passwords:$/ {
match($0, /[^ ]/)
n = RSTART
}
{print}' < "$YAML"