Y a-t-il une manière de dire sed à la sortie seulement les groupes capturés ? par exemple, donné par entrée :
et le motif
Je pourrais obtenir sortie seulement 123 et 987 de la manière formatée par références arrières peut-être ?
Y a-t-il une manière de dire sed à la sortie seulement les groupes capturés ? par exemple, donné par entrée :
et le motif
Je pourrais obtenir sortie seulement 123 et 987 de la manière formatée par références arrières peut-être ?
La clé de l'obtention de ce travail est de raconter sed
d'exclure ce que vous ne voulez pas être de sortie ainsi que la spécification de ce que vous voulez.
string='This is a sample 123 text and some 987 numbers'
echo "$string" | sed -rn 's/[^[:digit:]]*([[:digit:]]+)[^[:digit:]]+([[:digit:]]+)[^[:digit:]]*/\1 \2/p'
Cela en dit:
-n
)p
)Si vous avez GNU grep
(il peut aussi travailler dans des BSD, y compris OS X):
echo "$string" | grep -Po '\d+'
ou des variantes telles que:
echo "$string" | grep -Po '(?<=\D )(\d+)'
L' -P
option permet à Perl Compatible Regular Expressions. Voir man 3 pcrepattern
ou man
3 pcresyntax
.
Je crois que le dessin donné dans la question a été à titre d’exemple seulement, et le but était pour correspondre à n’importe quel modèle.
Si vous avez un sed avec GNU extension autorisant insérer un saut de ligne dans l’espace modèle, une suggestion est :
Ces exemples sont avec tcsh (Oui, je sais que c’est la coque mal) avec CYGWIN. (Edit : pour bash, retirer ensemble, ainsi que les espaces autour =.)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.