Если вы имеете в виду, что вы хотите выполнить замену в каждой строке , предшествующей данному совпадению, это ваш ответ:
Подстановка принимает необязательный диапазон адресов; Вы можете использовать как цифры, так и шаблоны. В этом случае начните со строки 1 и продолжайте до своего паттерна:
sed '1,/baz/s/foo/bar/g'
В awk:
awk '
/baz/ { done = 1 }
{
if (!done) {
gsub(/foo/, "bar")
}
print
}'
(он достаточно короткий, чтобы пропустить разрывы строк, но они делают его читаемым)