Saya memiliki baris dari beberapa file seperti ini:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Saya ingin mengekstrak 512^3
, 16^3
, 32^3
dan 800
empat angka dari itu dan menetapkan mereka masing-masing untuk empat variabel level
, grid
, boxes
dan tasks
untuk penggunaan lainnya.
Bagaimana saya bisa melakukan ini?
bash
regular-expression
string
Yulong Ao
sumber
sumber
Jawaban:
Bash dapat mencocokkan ekspresi reguler dengan
=~
operator di[[ ... ]]
:sumber
[[ 'Example 123' =~ '([0-9]+)' ]]
salah, tetapi[[ 'Example 123' =~ ([0-9]+) ]]
berfungsi seperti yang dimaksudkan.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
hanya cocok1
.Menggunakan awk:
sumber
Jika ini adalah output dari program / skrip yang Anda tulis dan teksnya adalah rumus (yaitu mengikuti pola ini persis) Anda bisa menggunakan
cut
.sumber
Jika garis selalu memiliki struktur ini,
read
dapat melakukan ini dalam satu baris tanpa proses eksternal:(juga menggunakan herestring ). Ini akan menyimpan semua kata yang tidak Anda pedulikan
x
(untuk diabaikan) dan nilai yang Anda inginkan ke dalam variabel masing-masing.sumber