Não tenho certeza se entendi completamente sua pergunta, mas parece que você já teve uma parte dela e já precisa de uma maneira de reduzir o texto que deseja inserir no comando base64 .
Eu quero responder a esta parte:
i assume i will lookup for a) base64 and b) ------=Part
trim the blank lines and im having base64 but what if there are 2 base64, i want first one
Você pode imprimir todas as linhas da primeira instância de base64 para a primeira após a instância de =_Part_ com o seguinte comando sed :
sed -n '/base64/,${p;/=_Part_/q;}' inputfile
Explicação:
-n suprime a ação padrão de imprimir cada linha.
/base64/,$ aplica o seguinte bloco de código da primeira instância de base64 ao final do arquivo. ( $ significa a última linha neste contexto.)
p significa imprimir a linha.
/=_Part_/ é um padrão que limita o comando q que o segue para que seja executado apenas se a linha contiver =_Part_ .
O comando q fecha sed , fazendo com que todas as linhas subseqüentes não sejam processadas.
O resultado de tudo isso é muito semelhante ao mais simples sed -n '/base64/,/=_Part_/p' inputfile , que imprimiria de base64 a =_Part_ , mas essa versão mais simples imprimiria várias dessas seções em vez de parar após a primeiro.