У меня есть этот файл:
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будет фильтровать только то, что фильтрует раньше, за исключением того, что каждая строка вывода открывается с номером.