У меня есть строка из некоторого файла, как это:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Я хочу , чтобы извлечь 512^3
, 16^3
, 32^3
и 800
четыре числа от него и назначить их соответственно четыре переменных level
, grid
, boxes
и tasks
для других целей.
Как я могу это сделать?
bash
regular-expression
string
Юлонг Ао
источник
источник
Ответы:
Bash может сопоставлять регулярные выражения с
=~
оператором в[[ ... ]]
:источник
[[ 'Example 123' =~ '([0-9]+)' ]]
, ложно, но[[ 'Example 123' =~ ([0-9]+) ]]
работает как задумано.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
только совпадения1
.Использование awk:
источник
Если это вывод из программы / сценария, который вы написали, а текст является формульным (т.е. точно соответствует этому шаблону), вы можете просто использовать
cut
.источник
Если строка всегда имеет именно эту структуру,
read
можно сделать это в одной строке без внешних процессов:(также используя Herestring ). Это сохранит все слова, которые вас не интересуют
x
(игнорируются), и значения, которые вы хотели, в соответствующие переменные.источник