Mam ten plik:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Chcę przeszukać ten plik pod kątem określonego ciągu i wydrukować wszystko przed tym ciągiem aż do otwarcia {
i wszystko po tym ciągu aż do zamknięcia }
. Próbowałem to osiągnąć za pomocą sed, ale jeśli spróbuję wydrukować wszystko w zakresie, /{/,/string2/
na przykład sed wydrukuje to:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Jeśli szukam ciągu „string2”, potrzebuję danych wyjściowych:
sometext2{
string2
string3
}
Dzięki.
grep -n '' <infile | sed ...
. Te sed
komendy będą musiały modyfikującego; w szczególności bity /
adresu, /
które szukają ^
najlepszych kotwic. Tak więc, jeśli były przy użyciu moją odpowiedź prawdopodobnie można zrobić: grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
. Wszystkie wiersze wyjściowe będą poprzedzone numerami wierszy w oryginalnym pliku, a następnie dwukropkiem itp 1:sometext1{\n2:string1
. sed
będzie filtrować tylko to, co wcześniej filtrował, z wyjątkiem tego, że każda linia wyjściowa otwiera się liczbą.