sed - Получить только замененную строку из многострочного ввода и опустить несовпадающие строки!

Я хочу, чтобы 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 с использованием обратных ссылок казался каким-то образом связанным, но я не уверен!

18
задан Community 23 May 2017 в 12:24
поделиться