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
Vous devez vous connecter pour publier un commentaire.
EDIT: Suite a été testé sur Mac & Linux.
Vous pouvez utiliser sed comme ceci:
Explication
Cette commande sed fait ce que votre combinaison de egrep et le sed n':
Vous effectuez le remplacement et n'imprimer uniquement les lignes qui correspondent, après la substitution.
Preuve de Concept