2015-03-06 2 views
1

Это один из отпечатков между двумя узорамиAWK печатать только линии между двумя фигурами удаления первого матча

printf "/n"| openssl s_client -showcerts -connect www.google.com:443 | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/'

Тогда это один удаляет первый соответствующий набор, но затем печатает все лишнее Нежелательная

printf "/n"| openssl s_client -showcerts -connect www.google.com:443 | awk '/-----BEGIN CERTIFICATE-----/{f=1;++c} !(f && c==2); /-----END CERTIFICATE-----/{f=0}'

Я хотел бы получить второй результат с лишним материалом за пределами шаблонов, которые я мог бы, используя только два awks.

printf "/n"| openssl s_client -showcerts -connect www.google.com:443 | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' | awk '/-----BEGIN CERTIFICATE-----/{f=1;++c} !(f && c==2); /-----END CERTIFICATE-----/{f=0}'

Но я хотел бы сделать это в одном, если это возможно.

ответ

1

Это кажется очень похож на this question, и я бы адаптировать мой SED ответ следующим образом:

sed -n '/-----BEGIN CERTIFICATE----/,/-----END CERTIFICATE-----/ { // { x; s/$/./; x; }; x; /.../ { x; p; x; }; x; }' filename 

Это

/-----BEGIN CERTIFICATE----/,/-----END CERTIFICATE-----/ { 
    // {   
    x 
    s/$/./  # keep a counter of boundary lines in the hold buffer 
    x 
    } 
    x    # inspect the counter 
    /.../ {  # if counter >= 3 
    x 
    p   # print the line 
    x 
    } 
    x 
}    # with -n, falling off the end here will not lead to printing. 

В качестве альтернативы, здравомыслящий AWK я могу думать о

awk '/----BEGIN CERTIFICATE----/ { flag = 1; ++ctr } flag && ctr >= 2 { print } /-----END CERTIFICATE-----/ { flag = 0 }' filename 

более читаемо:

/----BEGIN CERTIFICATE----/ { # beginning of a range: 
    flag = 1      # raise flag that we're in one 
    ++ctr      # count in which one 
} 
flag && ctr >= 2 { print }  # print only if in a range and not in the first 
/-----END CERTIFICATE-----/ { # when leaving 
    flag = 0      # lower flag 
} 
Смежные вопросы