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 sedkomendy 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. sedbędzie filtrować tylko to, co wcześniej filtrował, z wyjątkiem tego, że każda linia wyjściowa otwiera się liczbą.