Motif pour obtenir une chaîne entre deux mots / caractères spécifiques en utilisant grep
J'ai besoin d'extraire une adresse de courriel à partir d'une chaîne comme ça (je suis en train de faire un analyseur de fichier journal):
<some text> [email protected], <some text>
avec egrep
(ou grep -Eo
). Ainsi, la chaîne doit être retiré uniquement entre "from="
et ","
, parce que les autres pièces de journal de contenir des adresses e-mail, comme to=
et etc
source d'informationauteur Shirker
Vous devez vous connecter pour publier un commentaire.
À l'aide de
grep -oP
:OU sinon d'éviter
lookbehind
en utilisant\K
:Dans le cas où votre
grep
ne prend pas en charge-P
(PCRE) utilisez ce sed:Essayer
awk
Ici
$2
peut être un nombre différent en fonction de sa position.Purement bash solution, nécessite deux étapes de la bande préfixe & suffixe séparément (mais probablement plus vite, parce que pas de sous-processus):
De sortie:
Notes:
${var#*pattern}
à l'aide de#
bandes depuis le début de$var
jusqu'àpattern
${var%pattern*}
à l'aide de%
bandes de fin de$var
jusqu'àpattern
${var/pattern/replace}
(et en laissantreplace
vide), mais il est plus délicat étant donné le regexp n'est pas pris en charge (c'est à dire, ne peut pas utiliser^
ou '$'), de sorte que vous ne pouvez pas le faire (par exemple)/^from=//
mais vous pourriez faire lors de la première étape${var/*from=/}
et ensuite à l'étape deux, ne${var/,*/}
(en fonction de vos données, bien sûr).