Ho un file prova.txt
come questo:
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 devo passare da "Inizia a prendere qui" alla prima riga vuota. L'output dovrebbe essere così:
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
Come puoi vedere le righe dopo "Inizia a prendere qui" sono casuali, quindi -A -B grep flag non funziona:
cat prova.txt | grep "Start to grab from here" -A 15 | grep -B 15 "^$" > output.txt
Potete aiutarmi a trovare un modo per catturare la prima linea che verrà afferrata (come "Inizia ad afferrare da qui"), fino a quando una linea vuota. Non riesco a prevedere quante linee casuali avrò dopo "Inizia a prendere da qui".
Qualsiasi soluzione compatibile con unix è apprezzata (grep, sed, awk è meglio di perl o simili).
EDITATO: dopo una brillante risposta di @ john1024, vorrei sapere se è possibile:
1 ° ordina il blocco (secondo Inizia a prendere da qui: 1 quindi 1 quindi 2)
2 ° rimuovi 4 righe (in ordine alfabetico) fix1, fix2, fix3, fix4 ma sono sempre 4
3 ° alla fine rimuove i duplicati casuali, come il comando sort -u
L'output finale dovrebbe essere così:
# 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
o
# 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
Il secondo output è migliore del primo. È necessaria qualche altra magia di comando unix.