comment utiliser sed, awk, ou gawk pour n'imprimer que ce qui est en correspondance?

Je vois beaucoup d'exemples et de pages de manuel sur la façon de faire les choses comme pour la recherche et les remplacer à l'aide de sed, awk, ou gawk.

Mais dans mon cas, j'ai une expression régulière qui je veux courir à l'encontre d'un fichier texte pour en extraire une valeur spécifique. Je ne veux pas faire de recherche et remplacement. C'est être appelé à partir de bash. Prenons un exemple:

Exemple de l'expression régulière:

.*abc([0-9]+)xyz.*

Exemple de fichier d'entrée:

a
b
c
abc12345xyz
a
b
c

Aussi simple que cela puisse paraître, je ne peux pas comprendre comment appeler sed/awk/gawk correctement. Ce que j'espérais faire, c'est de l'intérieur de mon script bash ont:

myvalue=$( sed <...something...> input.txt )

Choses que j'ai essayé de comprendre:

sed -e 's/.*([0-9]).*/\/g' example.txt # extracts the entire input file
sed -n 's/.*([0-9]).*/\/g' example.txt # extracts nothing
  • Wow...les gens ont voté cette question en baisse de -1? Est-ce vraiment inapproprié d'une question?
  • Il semble tout à fait approprié, en utilisant les Regex et puissants utilitaires de ligne de commande comme sed/awk ou tout éditeur de texte comme vi, emacs ou teco peut être plus comme de la programmation que de simplement en utilisant certains ol' application. IMO ça, c'est TELLEMENT plus que SU.
  • Peut-être qu'il a été rejeté parce que, dans sa forme initiale, il n'a pas de définir clairement certaines de ses exigences. Ça ne fonctionne toujours pas, sauf si vous lisez l'OP commentaires aux réponses (y compris celui que j'ai supprimé quand les choses sont allées en forme de poire).
InformationsquelleAutor Stéphane | 2009-11-14