LINUX.ORG.RU

Вывод текста между определенными строками.

 


0

1

Есть выхлоп из imap:

. OK [READ-WRITE] inbox selected. (Success)
* 4 FETCH (UID 4 BODY[2] {73350}
Euq/utr+hbW11i20yMdX2xYqwsQ0xUME1ENR////////yKqP//////4AIAIKZW5kc3RyZWFtCmVu
ZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmDQowMDAwMDAwMDE1IDAwMDAwIG4NCjAw
MDAwMDAyMzUgMDAwMDAgbg0KMDAwMDAwMDMwMCAwMDAwMCBuDQowMDAwMDAwMzYzIDAwMDAwIG4N
CjAwMDAwMDMyNDQgMDAwMDAgbg0KMDAwMDAwMzQxNyAwMDAwMCBuDQowMDAwMDAzNTkyIDAwMDAw
IG4NCjAwMDAwMDM2ODUgMDAwMDAgbg0KMDAwMDAzNDcwOSAwMDAwMCBuDQowMDAwMDM0ODAzIDAw
MDAwIG4NCnRyYWlsZXIKPDwKL0luZm8gMSAwIFIKL1Jvb3QgMiAwIFIKL1NpemUgMTEKPj4Kc3Rh
cnR4cmVmCjUzMzAwCiUlRU9GCg==
)
. OK Success
* BYE LOGOUT Requested
. OK 73 good day (Success)

Надо между строками:

* 4 FETCH (UID 4 BODY[2] {73350}

и

. OK Success

вытащить base64 блок.

Стандартный парсер base64 не прокатывает из-за того, что в выхлоп попадает сертификат.

#!/bin/bash

echo '
. OK [READ-WRITE] inbox selected. (Success)
* 4 FETCH (UID 4 BODY[2] {73350}
Euq/utr+hbW11i20yMdX2xYqwsQ0xUME1ENR////////yKqP//////4AIAIKZW5kc3RyZWFtCmVu
ZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmDQowMDAwMDAwMDE1IDAwMDAwIG4NCjAw
MDAwMDAyMzUgMDAwMDAgbg0KMDAwMDAwMDMwMCAwMDAwMCBuDQowMDAwMDAwMzYzIDAwMDAwIG4N
CjAwMDAwMDMyNDQgMDAwMDAgbg0KMDAwMDAwMzQxNyAwMDAwMCBuDQowMDAwMDAzNTkyIDAwMDAw
IG4NCjAwMDAwMDM2ODUgMDAwMDAgbg0KMDAwMDAzNDcwOSAwMDAwMCBuDQowMDAwMDM0ODAzIDAw
MDAwIG4NCnRyYWlsZXIKPDwKL0luZm8gMSAwIFIKL1Jvb3QgMiAwIFIKL1NpemUgMTEKPj4Kc3Rh
cnR4cmVmCjUzMzAwCiUlRU9GCg==
)
. OK Success
* BYE LOGOUT Requested
. OK 73 good day (Success)
' | awk '
/^\. OK Success/ {q=0}
q
/^\* 4 FETCH/    {q=1}
'
anonymous
()
Ответ на: комментарий от anonymous

такой скрипт накатал, а использовать stdin не умеешь. ТС будет каждый раз данные руками в него копипастить?

anonymous
()
Ответ на: комментарий от anonymous

stdin? Что это? Это пример, а не готовая реализация того, что нужно автору поста. Я его мысли не читаю, дорогой друг.

anonymous
()
Ответ на: комментарий от anonymous

в unix принято использовать стандартные потоки для передачи данных между программами. выглядит очень странным ход мыслей заставивший тебя так оформить скрипт. oh well

anonymous
()
Ответ на: комментарий от anonymous

Прикольно, но сделал подпрограмму:

#!/usr/bin/awk

/^\. OK Success/ {q=0}
q
/^\* 4 FETCH/    {q=1}

Выполнил «cat tifochka.base64 | ./parseattach»

Обрадовал выводом:

awk: cmd. line:1: ./parseattach
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: ./parseattach
awk: cmd. line:1:   ^ unterminated regexp

Я похоже неправильно понял?

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Мне вот этот выхлоп надо пропарсить:

(echo '. LOGIN mymail@gmail.com DerParol'; echo '. SELECT inbox'; echo '. UID FETCH 4 (BODY[2])';  echo '. logout' ) | openssl s_client -crlf -ign_eof -connect imap.gmail.com:993
steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Добавь в конец:

|perl -ne 'print if m/^\* 4 FETCH/..m/^\. OK/'|tail -n +2|tac|tail -n +3|tac

disarmer ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.