Eu tenho uma linha de algum arquivo como este:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Eu quero extrair o 512^3
, 16^3
, 32^3
e 800
quatro números a partir dele e atribuir-lhes, respectivamente, para quatro variáveis level
, grid
, boxes
e tasks
para outro uso.
Como posso fazer isso?
bash
regular-expression
string
Yulong Ao
fonte
fonte
Respostas:
O Bash pode corresponder expressões regulares ao
=~
operador em[[ ... ]]
:fonte
[[ 'Example 123' =~ '([0-9]+)' ]]
é falso, mas[[ 'Example 123' =~ ([0-9]+) ]]
funciona como pretendido.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
apenas corresponde1
.Usando o awk:
fonte
Se isso é resultado de um programa / script que você escreveu e o texto é de fórmula (ou seja, segue exatamente esse padrão), você pode simplesmente usar
cut
.fonte
Se a linha sempre tiver exatamente essa estrutura,
read
poderá fazer isso em uma única linha sem processos externos:(também usando um herestring ). Isso salvará todas as palavras com as quais você não se importa
x
(a serem ignoradas) e os valores desejados nas respectivas variáveis.fonte