Isso pode ser feito com sed
ou awk
. Faça sua escolha. Pessoalmente, gosto de usar a ferramenta com a menor pegada. Você pode, é claro, fazê-lo em qualquer linguagem de programação como código de máquina Perl, C, SNOBOL ou PDP-8, mas isso pode estar um pouco além do escopo da questão. ;)
Para excluir um usuário da linha UserDir enable
usando sed:
sed -e '/^[^#]*UserDir\s\+enabled\s\+/ s/\bfoo\b//g' -e 's/\s\+/ /g' FILE-IN >FILE-OUT
Isso faz duas coisas:
- Para todas as linhas que começam com um não comentado
UserDir enabled
, ele remove o usuáriofoo
(mas não, por exemplo, um usuáriofoobar
). - Remove o espaço em branco supérfluo.
Para adicionar um usuário:
sed -e '/^[^#]*UserDir\s+enabled\s+/ s/\(\s\+#\|$\)/ bar/' FILE-IN >FILE-OUT
Isso procurará todas as linhas como Userdir enabled
que não foram comentadas, como antes. Para todas as linhas encontradas, ele adicionará o usuário bar
no final. Se a linha termina em um comentário, o comentário é respeitado e deixado lá.
Para adicionar uma nova linha UserDir enabled
após a linha UserDir disabled
:
sed -e '/^[^#]*UserDir\s+enabled\s+/ a UserDir disabled foo bar baz' FILE-IN >FILE-OUT
Isso usa o comando append ( a
) sed
para adicionar texto após todas as linhas não comentadas como UserDir enabled ...
. Altere o a
para um i
para inserir antes da linha correspondente.
Algumas notas:
- Obviamente, altere "ativado" para "desativado" à vontade.
- Usamos
\s+
em vez de espaços para capturar casos em que outras formas de espaço em branco são usadas (por exemplo, guias) e / ou vários caracteres de espaço em branco são encontrados. - Você pode combinar as duas operações. Sed pode executar várias expressões em cada arquivo. Cada expressão é fornecida após a opção
-e
e é executada em ordem, da esquerda para a direita. - Observe que alguns caracteres que não são escapados em alguns dialetos de expressões regulares são ignorados pelo sabor da expressão regular usado por
sed
. - Isso exigirá um arquivo temporário (
FILE-OUT
) para armazenar o arquivo editado (FILE-IN
). Se você quiser invocar estes no local (sem redirecionar para um arquivo temporário), substitua oFILE-IN >FILE-OUT
por-i FILE
. - Isso funciona com certeza no Linux. Sua milhagem pode variar com
sed
versões de outros Unices. Você pode achar que-i
(acima) não está disponível e que o suporte a expressões regulares é mais limitado.
Resposta fora do tópico: seria muito mais fácil se o Apache permitisse inserir várias diretivas UserDir
e adicionasse as listas de usuários. Pode fazer isso, mas uma verificação superficial veio em branco. Eu nunca tive que fazer isso, então não tenho certeza se é possível.