Я хочу, чтобы sed опускал все несоответствующие строки и выводил только замененную строку (из одной / нескольких предполагаемых строк / с).
Другими словами: У меня есть стог сена, и я хочу только вернуть иглу, а не все сено, которое было обыскано и которое осталось неизменным.
Или, другими словами: Поиск/ заменить строку, описанную RegEx, в многострочную строку и вернуть только эту строку.(Как это возможно с помощью функции PHP http://www.php.net/manual/en/function.preg-replace.php)
Мой текущий обходной путь - сначала отфильтровать с помощью grep, а затем передать только совпадающие строки в sed для замены:
echo -e "Bla\nBla\nImportant1: One \nBla\nImportant2: Two\nBla\nBla" | egrep "^Important1.*$" | sed -E "s/^Important1: *\b(.*)\b */\1/g"
# From the multiple line input I only want the "One One" (with pre/post whitespace removed, hence matching the word boundaries with "\b")
# And I want no "Bla bla" lines in the result!
Но я бы хотел иметь одно решение в рамках sed .Или это не по назначению sed, и я должен поэтому лучше использовать что-то еще?Кстати, вопрос: многострочный sed с использованием обратных ссылок , похоже, как-то связан, но я не уверен!