Я хочу, чтобы 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, и должен ли я лучше использовать что-то еще? Btw, issue: multiline sed с использованием обратных ссылок, как-то было связано, но я не уверен!