Tengo una línea de algún archivo como este:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Quiero extraer el 512^3
, 16^3
, 32^3
y 800
cuatro números de ello y asignarlos respectivamente a cuatro variables level
, grid
, boxes
y tasks
para otros usos.
¿Cómo puedo hacer esto?
bash
regular-expression
string
Yulong Ao
fuente
fuente
Respuestas:
Bash puede hacer coincidir expresiones regulares con el
=~
operador en[[ ... ]]
:fuente
[[ 'Example 123' =~ '([0-9]+)' ]]
es falso, pero[[ 'Example 123' =~ ([0-9]+) ]]
funciona según lo previsto.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
solo coincide1
.Usando awk:
fuente
Si esto es resultado de un programa / script que ha escrito y el texto es formulado (es decir, sigue este patrón exactamente), puede usarlo
cut
.fuente
Si la línea siempre tiene exactamente esta estructura,
read
puede hacer esto en una sola línea sin procesos externos:(también usando una herejía ). Esto guardará todas las palabras que no le interesan
x
(para ser ignoradas) y los valores que desea en sus respectivas variables.fuente