cs16_pl 2018-10-12 13:27:59 +2
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
OperatorHydrolokator 2018-10-12 13:40:52 +0
@cs16_pl: a tych linii tam może być więcej niż6 ?
OperatorHydrolokator 2018-10-12 13:44:10 +0
@cs16_pl:
sed -n '/^START_LINE$/,/^MY_END_LINE/p;/^MY_END_LINE/{n;p;n;p;n;p;n;p;n;p;n;p}' plik.txt
cs16_pl [OP] 2018-10-12 13:56:55 +0
@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.
OperatorHydrolokator 2018-10-12 14:11:37 +0
@cs16_pl: a tego to nie pisałeś wcześniej :P Czyli, że co, plik może wyglądać tak:
START_LINE
multi
line
string
multi
line
string
multi
line
string
MY_END_LINE
1
2
3
4
5
6

czy jak? Podaj jakiś przykład, będzie łatwiej.
cs16_pl [OP] 2018-10-12 14:21:21 +0
@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`



gdzie MYEND_LINE bedzie zawsze takie same.
OperatorHydrolokator 2018-10-12 14:24:56 +0
@cs16_pl: aaa, i w tym momencie ciebie interesuje konkretnie ten środkowy blok, nie?
cs16_pl [OP] 2018-10-12 14:26:59 +0
@OperatorHydrolokator: dokładnie tak.
Dzieki za odpowiedzi.
OperatorHydrolokator 2018-10-12 14:56:00 +0
[komentarz usunięty]
OperatorHydrolokator 2018-10-12 15:05:21 +0
@cs16_pl: a takie coś?
sed -n '/^START_LINE$/,/^$/p' plik.txt
Przy założeniu, że będą wolne linie w tym pliku ;D
cs16_pl [OP] 2018-10-12 15:17:16 +0
@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 6. 6 nie znam, dlatego najblizej jest MYENDLINE, do ktorej moglbym dolaczyc 6 linii. Sek w tym ze MYENDLINE bedzie sie powtarzalo w innych fragmentach.

Troche chaotycznie to napisalem ale mam nadzieje ze da sie zrozumiec ( ͡° ͜ʖ ͡°)
OperatorHydrolokator 2018-10-12 15:27:41 +0
@cs16_pl: No to trochę komplikuje sprawę ( ͡° ͜ʖ ͡°)