Python insere uma linha logo acima da segunda ocorrência de um padrão do final do arquivo [closed]

0

Eu tenho um arquivo de kickstart do RHEL como abaixo com várias seções % post ...% end nele, tendo muitas linhas de código Python entre elas.

%post
.....
.....
%end
%post
.....
.....
%end
%post
.....
.....
%end

Estou tentando inserir uma nova linha com alguns dados antes (acima) da segunda ocorrência do padrão de pesquisa "% end " do último (EOF). Qualquer sugestão / entrada é muito apreciada.

    
por Ibrahim Quraish 09.05.2018 / 14:43

2 respostas

1

Snippet Python que insere o texto spam na última posição no penúltimo bloco %post..%end :

with open('input') as fp:
    lines = fp.readlines()

locs = [i for i, val in enumerate(lines) if val == '%end\n']
lines.insert(locs[-2], 'spam' + '\n')

with open('input', 'w') as fp:
    fp.write(''.join(lines))
    
por 09.05.2018 / 17:58
1

Para inserir "alguns dados" antes da próxima linha do padrão.
grep + awk solution:

awk -v n="$(($(grep -c '^%end' inputfile) - 1))" \
'/^%end/{ if (++cnt == n) print "some data" }1' inputfile

A saída:

%post
.....
.....
%end
%post
.....
.....
some data
%end
%post
.....
.....
%end
    
por 09.05.2018 / 17:25

Tags