Sé que puedo usar el command -A y -B para grep para get mucho de lo que estoy buscando, pero eso no es lo que quiero.
Estoy buscando analizar el file httpd.conf para search un dominio . A continuación, muestre todo entre las tags de VirtualHost para ese dominio . Un ejemplo del host virtual es el siguiente.
Para search un dominio, ejecuto el siguiente command:
less /usr/local/apache2/conf/httpd.conf |grep domain.tld
Pero eso no me da el host virtual completo solo las líneas que contienen el dominio.
<VirtualHost 192.168.1.10:80> SSLEngine on SSLCACertificateFile /usr/share/ssl/certs/ca-bundle.crt SuexecUserGroup anzenketh wheel ServerName anzenketh.net ServerAlias www.anzenketh.net ServerAdmin root@anzenketh.net DocumentRoot /home/anzenketh/www/anzenketh.net ScriptAlias /cgi-bin/ "/home/anzenketh/www/cgi-bin/" <Directory /home/anzenketh/www/cgi-bin> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> CustomLog /var/log/httpd/anzenketh/anzenketh.net-access_log combined ErrorLog /var/log/httpd/anzenketh/anzenketh.net-error_log </VirtualHost>
Aquí hay una llamada sed
para get todo entre (e incluyendo) dos cadenas específicas:
sed -n '/<VirtualHost*/,/<\/VirtualHost>/p' httpd.conf
Si quieres search un dominio específico, simplemente agrégalo:
sed -n '/<VirtualHost 192.168.1.10:80>*/,/<\/VirtualHost>/p' httpd.conf
Debe usar grep
? sed
y awk
son más adecuados para tales tareas:
sed -n '/<VirtualHost /,/<\/VirtualHost>/p' inputfile awk '/<VirtualHost /,/<\/VirtualHost>/' inputfile
Como las directivas httpd.conf no distinguen entre mayúsculas y minúsculas, es posible que prefiera utilizar coincidencias que no distinguen entre mayúsculas y minúsculas:
sed -n '/<VirtualHost /I,/<\/VirtualHost>/Ip' inputfile gawk -vIGNORECASE=1 '/<VirtualHost /,/<\/VirtualHost>/' inputfile
( IGNORECASE
es la extensión GNU, solo disponible en gawk
).
Actualizar según la pregunta modificada:
sed -n '/<VirtualHost\s\+192\.168\.1\.10\b/I,/<\/VirtualHost>/Ip' inputfile gawk -vIGNORECASE=1 '/<VirtualHost\s+192\.168\.1\.10\>/,/<\/VirtualHost>/' inputfile
awk '/Iowa/,/Montana/' file
Reemplace la cadena A y B por la suya.
grep -Pzio '(?s)<VirtualHost ([yourserverip]|\*)(:(80|443))?>(?:.(?!</VirtualHost))*?ServerName +[yourservername](?:(?!</VirtualHost).)*?</VirtualHost>' [yourfilename]
Reemplazar todo el contenido dentro de [] con valores correctos