Mostrar líneas entre el text con grep

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