У мене є цей файл:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
Я хочу шукати в цьому файлі певний рядок і надрукувати все перед цим рядком до відкриття {і все після цього рядка до закриття }. Я намагався досягти цього за допомогою sed, але якщо я спробую надрукувати все в діапазоні, /{/,/string2/наприклад, sed роздруковує це:
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
Якщо я шукаю рядок "string2", мені потрібен вихід:
sometext2{
string2
string3
}
Дякую.
grep -n '' <infile | sed .... Ці sedкоманди будуть потрібні зміну; зокрема біти /адреси, /які шукають ^якісні якірні елементи. Таким чином, якщо ви використовували мій відповідь, ймовірно , можна зробити наступне : grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'. Усі вихідні рядки будуть встановлені з префіксами номерів рядків оригінального файлу з подальшим двокрапкою тощо 1:sometext1{\n2:string1. sedбуде фільтрувати лише те, що фільтрувалося б раніше, за винятком того, що кожен вихідний рядок відкривається цифрою.