Eu tenho um arquivo prova.txt
como este:
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4
extra1
extra2
bla
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561
extra2
bla
bla
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131
e eu preciso sair de "Start to grab here" para a primeira linha em branco. A saída deve ser assim:
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131
Como você pode ver, as linhas depois de "Iniciar para pegar aqui" são aleatórias, portanto, o sinalizador -A -B grep não funciona:
cat prova.txt | grep "Start to grab from here" -A 15 | grep -B 15 "^$" > output.txt
Você pode me ajudar a encontrar uma maneira de pegar a primeira linha que será agarrada (como "Comece a pegar daqui"), até uma linha em branco. Não posso prever quantas linhas aleatórias terei depois de "Comece a pegar daqui".
Qualquer solução compatível com unix é apreciada (grep, sed, awk é melhor que perl ou similar).
EDITADO: após uma resposta brilhante de @ john1024, gostaria de saber se é possível:
1 ° classifique o bloco (de acordo com Start para pegar daqui: 1 e 1 e 2)
2 ° remova 4 linhas (alfabeticamente aleatórias) fix1, fix2, fix3, fix4, mas são sempre 4
3 ° eventualmente remove dupes aleatórios, como o comando sort -u
A saída final deve ser assim:
# fix lines removed - match 1 first time
Start to grab from here: 1
random1
random2
random3
random4
#fix lines removed - match 1 second time
Start to grab from here: 1
#random1 removed cause is a dupe
random22131
#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561
ou
# fix lines removed - match 1 first time and the second too
Start to grab from here: 1
random1
random2
random3
random4
#random1 removed cause is a dupe
random22131
#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561
A segunda saída é melhor que a primeira. É necessária alguma outra mágica de comando unix.