J'ai une ligne d'un fichier comme celui-ci:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Je veux extraire le 512^3
, 16^3
, 32^3
et 800
quatre numéros et de les attribuer respectivement à quatre variables level
, grid
, boxes
et tasks
pour une autre utilisation.
Comment puis-je faire ceci?
bash
regular-expression
string
Yulong Ao
la source
la source
Réponses:
Bash peut faire correspondre des expressions régulières avec l'
=~
opérateur dans[[ ... ]]
:la source
[[ 'Example 123' =~ '([0-9]+)' ]]
est faux, mais[[ 'Example 123' =~ ([0-9]+) ]]
fonctionne comme prévu.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
ne correspond qu'à1
.Utilisation de awk:
la source
Si cela provient d'un programme / script que vous avez écrit et que le texte est de formule (c'est-à-dire suit exactement ce modèle), vous pouvez simplement l'utiliser
cut
.la source
Si la ligne a toujours exactement cette structure,
read
peut le faire sur une seule ligne sans processus externe:(en utilisant également une herestring ). Cela sauvera tous les mots qui ne vous intéressent pas
x
(à ignorer) et les valeurs que vous vouliez dans leurs variables respectives.la source