sed - Obtenir seulement la chaîne remplacée d'une entrée multiligne & amp; omettre les lignes inégalées!

Je veux sed d'omettre tous les non-correspondance des lignes, et la seule sortie de l'remplacé chaîne (de la simple/multiple prévu ligne/s).

En d'autres termes: j'ai une pile de foin, et que vous souhaitez uniquement l'aiguille retour, pas tout le foin qui a été fouillé, et qui est resté inchangé.

Ou encore en d'autres mots: Rechercher/remplacer une RegEx décrit chaîne de caractères dans une chaîne multi-ligne, et obtenez seulement que la chaîne de caractères retournée. (Comme il est possible avec la fonction PHP http://www.php.net/manual/en/function.preg-replace.php )

Ma solution actuelle est d'abord de filtre avec grep, et ensuite copier uniquement les lignes correspondants dans sed pour le remplacement:

echo -e "Bla\nBla\nImportant1: One \nBla\nImportant2: Two\nBla\nBla" | egrep "^Important1.*$" | sed -E "s/^Important1: *\b(.*)\b *//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!

Mais j'aimerais avoir un solution unique au sein de sed. Ou est-ce hors de prévu sed d'utilisation, et que je devrais donc mieux utiliser quelque chose d'autre? Btw, question: multiline sed à l'aide des références arrières semblait en quelque sorte lié, mais je n'en suis pas sûr!

source d'informationauteur porg