Estou tentando fazer o script de uma alteração no meu arquivo de configuração do apache (httpd.conf). Estou tentando combinar a seguinte string:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
E ADICIONE o seguinte texto:
#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost ip6-localhost 127.0.0.1 192.168.0.0/255.255.255.0
</Location>
Meu entendimento é que o sed não suporta correspondências de várias linhas, o awk parece difícil de fazer correspondências de várias linhas. Estou tentando fazer o perl funcionar com perl -0777 -pi -e, mas não consigo descobrir uma expressão regular que corresponda ao padrão original.
Prefiro fazer isso como um liner - não como um script porque quero que seja portátil (ou seja, copie e cole conforme necessário).
Algum especialista em regex perl por aí que possa me ajudar a encontrar uma solução?
Muito obrigado antecipadamente Brad
EDITAR
As seguintes obras:
sed -i -e ':begin;$!N;s/#\n# DirectoryIndex/#\n# Allow server status reports generated by mod_status,\n# with the URL of http:\/\/servername\/server-status\n# Change the ".example.com" to match your domain to enable.\n#\n<Location \/server-status>\n\tSetHandler server-status\n\tOrder deny,allow\n\tDeny from all\n\tAllow from localhost ip6-localhost 192\.168\.0\.0\/255\.255\.255\.0\n<\/Location>\n\n#\n\#DirectoryIndex/;tbegin;P;D' /etc/httpd/conf/httpd.conf
Mas não há espaço entre # e DirectoryIndex.
No entanto, se eu tentar alterá-lo para:
sed -i -e ':begin;$!N;s/#\n# DirectoryIndex/#\n# Allow server status reports generated by mod_status,\n# with the URL of http:\/\/servername\/server-status\n# Change the ".example.com" to match your domain to enable.\n#\n<Location \/server-status>\n\tSetHandler server-status\n\tOrder deny,allow\n\tDeny from all\n\tAllow from localhost ip6-localhost 192\.168\.0\.0\/255\.255\.255\.0\n<\/Location>\n\n#\n\# DirectoryIndex/;tbegin;P;D' /etc/httpd/conf/httpd.conf
O comando sed trava e nunca termina. Eu não consigo descobrir por quê?
A única diferença é um espaço entre # e DirectoryIndex.
Você deveria tentar
Não se esqueça de escapar sua string
replace
(\/
for/
) quando estiver usando / delimitador na ferramenta regexpSe você estiver executando por meio do shell, poderá fazer um script como esse
Com newConfFile contém a configuração do host virtual que você deseja adicionar
Esta é uma função Bash para testar se existe uma função
por exemplo
canExec sed
, teste se o comando sed existe em seu sistemaCom o awk, que tal:
Isso deve funcionar para você porque você não precisa estritamente PREPENDER o texto - já que tanto o texto que você está procurando quanto o texto que está inserindo começam com
#
você pode deixar o original#
, insira seu texto menos a primeira#
linha no meio, imprima a segunda linha original e imprima outra#
para ser aquela que você não colocou no início.Você terá que preencher o texto completo, mas há o suficiente aqui para me convencer de que pode funcionar ;)
(Minhas aspas duplas são para o prompt de comando do Windows. Ajuste conforme necessário).
Citação editada para bash: