#!/bin/bash
# ideone boilerplate: run in temp dir
t=$(mktemp -d -t ideone.XXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"
cat <<\: >test.txt
*Title Test
12125
124125
asdas 1 1 1 1
rthtr 1 1 1 1
asdasf 1 1 1 1
asfasf 1 1 1 1
blabla 1 1 1 1
124124124
*Title Dunno
12125
124125
12763125 1 1 1 1
ijkl
whatever 1 1 1 1
214142122
:
cat <<\: >test.py
transitions = dict()
in_region = False
reg_end = -1
current_title = None
with open("test.txt","r") as testfile:
content = testfile.readlines()
for idx, line in enumerate(content):
if line.startswith('*Title '):
# Commit last transition before this to dict, if any
if current_title:
transitions[reg_end] = current_title
# strip final newline
current_title = line.rstrip('\n') + '2\n'
elif line.strip().endswith(' 1 1 1 1'):
in_region = True
reg_end = idx
elif in_region:
in_region = False
transitions[reg_end] = current_title
with open("test.txt", "w") as output:
for idx, line in enumerate(content):
output.write(line)
if idx in transitions:
output.write(transitions[idx])
:
python3 test.py
cat test.txt
IyEvYmluL2Jhc2gKIyBpZGVvbmUgYm9pbGVycGxhdGU6IHJ1biBpbiB0ZW1wIGRpciAKdD0kKG1rdGVtcCAtZCAtdCBpZGVvbmUuWFhYWFhYWFgpIHx8IGV4aXQKdHJhcCAncm0gLXJmICIkdCInIEVSUiBFWElUCmNkICIkdCIKCmNhdCA8PFw6ID50ZXN0LnR4dAoqVGl0bGUgVGVzdAoxMjEyNQoxMjQxMjUKYXNkYXMgMSAxIDEgMQpydGh0ciAxIDEgMSAxCmFzZGFzZiAxIDEgMSAxCmFzZmFzZiAxIDEgMSAxCmJsYWJsYSAxIDEgMSAxCjEyNDEyNDEyNAoqVGl0bGUgRHVubm8KMTIxMjUKMTI0MTI1CjEyNzYzMTI1IDEgMSAxIDEKaWprbAp3aGF0ZXZlciAxIDEgMSAxCjIxNDE0MjEyMgo6CgpjYXQgPDxcOiA+dGVzdC5weQp0cmFuc2l0aW9ucyA9IGRpY3QoKQppbl9yZWdpb24gPSBGYWxzZQpyZWdfZW5kID0gLTEKY3VycmVudF90aXRsZSA9IE5vbmUKd2l0aCBvcGVuKCJ0ZXN0LnR4dCIsInIiKSBhcyB0ZXN0ZmlsZToKICAgIGNvbnRlbnQgPSB0ZXN0ZmlsZS5yZWFkbGluZXMoKQoKZm9yIGlkeCwgbGluZSBpbiBlbnVtZXJhdGUoY29udGVudCk6CiAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJypUaXRsZSAnKToKICAgICAgICAjIENvbW1pdCBsYXN0IHRyYW5zaXRpb24gYmVmb3JlIHRoaXMgdG8gZGljdCwgaWYgYW55CiAgICAgICAgaWYgY3VycmVudF90aXRsZToKICAgICAgICAgICAgdHJhbnNpdGlvbnNbcmVnX2VuZF0gPSBjdXJyZW50X3RpdGxlCiAgICAgICAgIyBzdHJpcCBmaW5hbCBuZXdsaW5lCiAgICAgICAgY3VycmVudF90aXRsZSA9IGxpbmUucnN0cmlwKCdcbicpICsgJzJcbicKICAgIGVsaWYgbGluZS5zdHJpcCgpLmVuZHN3aXRoKCcgMSAxIDEgMScpOgogICAgICAgIGluX3JlZ2lvbiA9IFRydWUKICAgICAgICByZWdfZW5kID0gaWR4CiAgICBlbGlmIGluX3JlZ2lvbjoKICAgICAgICBpbl9yZWdpb24gPSBGYWxzZQp0cmFuc2l0aW9uc1tyZWdfZW5kXSA9IGN1cnJlbnRfdGl0bGUKCndpdGggb3BlbigidGVzdC50eHQiLCAidyIpIGFzIG91dHB1dDoKICAgIGZvciBpZHgsIGxpbmUgaW4gZW51bWVyYXRlKGNvbnRlbnQpOgogICAgICAgIG91dHB1dC53cml0ZShsaW5lKQogICAgICAgIGlmIGlkeCBpbiB0cmFuc2l0aW9uczoKICAgICAgICAgICAgb3V0cHV0LndyaXRlKHRyYW5zaXRpb25zW2lkeF0pCjoKCnB5dGhvbjMgdGVzdC5weQoKY2F0IHRlc3QudHh0