Sou muito bom em usar os comandos preg_match
(e similares) do php e também sou muito bom com expressões regulares, mas não me dou muito bem com sed
.
Eu tenho dois scripts de shell em que estou trabalhando e gostaria de extrair algumas variáveis dos arquivos de configuração.
Primeiro arquivo
O primeiro arquivo é um arquivo .htaccess
e eu quero pegar o endereço da web, que estará em um bloco assim:
RewriteCond %{HTTP_HOST} !^www\.mysite\.net$
RewriteRule (.*) http://www.mysite.net/$1 [R=301,L]
A sintaxe do arquivo .htaccess
será bem regular, então eu sinto que devo usar um padrão similar a #.*(http.*?)\$#is
, o que faz:
- expressão regular
- delimitado por #
- 0 ou mais caracteres antes de http
- começa a capturar no http com o símbolo não ganancioso?
- continue capturando até atingir um cifrão real (com escape)
- não diferencia maiúsculas de minúsculas
- ignorar espaços em branco / novas linhas
Como posso usar essa expressão regular com um comando como sed
para que eu coloque a parte entre parênteses se corresponder e nada (string vazia) se ela não corresponder?
Eu seria melhor usar outro comando além de sed
se eu estivesse acostumado com o PCRE do php?
Segundo arquivo
O segundo arquivo é um pouco diferente porque é um arquivo .ini
e, por isso, gostaria de saber se poderia haver alguma mágica de shell (eu uso bash
) para analisá-lo. O pedaço que eu quero é assim:
[Database]
database = mysql://user:password@localhost/database
Se eu estivesse usando PHP e expressões regulares, faria algo assim:
#\s+database\s*=\s*mysql://([\:]+):([\@]+)@([\/]+)/(.*?)\s+#is
No PHP existe um analisador .ini, mas eu quero que seja um script shell / bash, não um script PHP
Como posso usar essa expressão regular para obter as credenciais de conexão do banco de dados?