Wpis z mikrobloga

Czesc,
podsuniecie mi pomysl w jaki sposob moge uzyskac zamierzony efekt?

Dla uproszczonego testu mam sobie plik text.txt

START_LINE
multi
line
string
MY_END_LINE
1
2
3
4
5
6

Zalezy mi na tym aby wybrac zakres pomiedzy START_LINE a MY_END_LINE + 6 linii tekstu
Jak wiec zmodyfikowac ponizsze aby dolaczyc kolejne linie?

sed -n '/^START_LINE$/,/^MY_END_LINE/p' text.txt
Problem w tym ze moim jedynym pkt odniesienia w duzym pliku bedzie START_LINE oraz MY_END_LINE, jako ze 1-6 beda zawieraly adresy, ktore moga byc rozne.

Dzieki za ewentualna pomoc.

#bash #sed #regexp #programowanie
  • 11
  • Odpowiedz
@OperatorHydrolokator: zakladam ze bedzie 6.
Pytanie czy to bedzie dzialalo jak nalezy, bo blok pomiedzy START_LINE a 6 moze wystapic wiecej razy albo wcale. I w przypadku gdy mam dwie instancje nie chcialbym aby dane byly pomieszane.
  • Odpowiedz
@OperatorHydrolokator:
Nie moge tak zrobic, bo MY_END_LINE wystepuje tez w blokach ktore nie pasuja do START_LINE
Plik moze wygladac tak:

DIFFERENT_STARTLINE
multi
line
string
multi
line
string
multi
line
string
MYEND_LINE
1
2
3
4
5
6

STARTLINE
multi
line
string
multi
line
string
multi
line
string
MYEND_LINE
1
2
3
4
5
6

ANOTHER_DIFFERENT_STARTLINE
multi
line
string
multi
line
string
multi
line
string
MYEND_LINE
1
2
3
4
5
6
  • Odpowiedz
@OperatorHydrolokator: hmm to zdefiniuje zakres od START_LINE do ostatniej pustej.
W pliku sa transakcje, w roznych sekcjach znajduja sie puste linie, wiec to nie moze byc punkt odniesienia.

Jesli wiec transakcja ma swoj specyficzny poczatek to potrzebuje ja cala wylapac. Na samym dole (5 i 6) znajduje sie linia adresowa, gdzie w zaleznosci od miejsca moze byc inna :)

W skrocie - gdy zaczyna sie od STARTLINE, chce wylapac wszystko do
  • Odpowiedz