grep을 사용하여 텍스트 사이에 줄 표시

grep을 사용하여 텍스트 사이에 줄 표시

나는 grep의 -A 및 -B 명령을 사용하여 내가 찾고 있는 많은 것을 얻을 수 있다는 것을 알고 있지만 실제로는 그것이 내가 원하는 것이 아닙니다.

httpd.conf 파일을 구문 분석하려고 합니다.도메인 이름 검색. 그 다음에이 도메인의 VirtualHost 태그 사이에 있는 모든 항목을 표시합니다.. 가상호스트의 예는 다음과 같다.

도메인을 검색하기 위해 다음 명령을 실행합니다.

less /usr/local/apache2/conf/httpd.conf |grep domain.tld

그러나 이것은 전체 가상 호스트를 제공하지 않고 도메인을 포함하는 행만 제공합니다.

<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    [email protected]
    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>

답변1

여기sed두 개의 특정 문자열 사이(포함)의 모든 항목을 가져오는 호출 입니다 .

sed -n '/<VirtualHost*/,/<\/VirtualHost>/p' httpd.conf

특정 도메인을 검색하려면 해당 도메인을 추가하세요.

sed -n '/<VirtualHost 192.168.1.10:80>*/,/<\/VirtualHost>/p' httpd.conf

답변2

사용해야합니까 grep? 다음과 같은 작업에 sedawk적합합니다.

sed -n '/<VirtualHost /,/<\/VirtualHost>/p' inputfile
awk '/<VirtualHost /,/<\/VirtualHost>/' inputfile

httpd.conf 지시문은 대소문자를 구분하지 않으므로 대소문자를 구분하지 않는 일치를 사용하는 것이 좋습니다:

sed -n '/<VirtualHost /I,/<\/VirtualHost>/Ip' inputfile
gawk -vIGNORECASE=1 '/<VirtualHost /,/<\/VirtualHost>/' inputfile

( IGNORECASEGNU 확장이며 에서만 사용할 수 있습니다 gawk.)

고쳐 쓰다변경된 질문에 따르면:

sed -n '/<VirtualHost\s\+192\.168\.1\.10\b/I,/<\/VirtualHost>/Ip' inputfile
gawk -vIGNORECASE=1 '/<VirtualHost\s+192\.168\.1\.10\>/,/<\/VirtualHost>/' inputfile

답변3

awk '/Iowa/,/Montana/' file

문자열 A와 B를 자신만의 문자열로 바꿉니다.

답변4

grep -Pzio '(?s)<VirtualHost ([yourserverip]|\*)(:(80|443))?>(?:.(?!</VirtualHost))*?ServerName +[yourservername](?:(?!</VirtualHost).)*?</VirtualHost>' [yourfilename]

[] 안의 모든 내용을 올바른 값으로 바꾸세요.

관련 정보