Ich habe eine Zeile aus einer Datei wie dieser:
attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...
Ich möchte , dass die extrahieren 512^3
, 16^3
, 32^3
und 800
vier Zahlen von ihr und ordnen sie jeweils zu vier Variablen level
, grid
, boxes
und tasks
für andere Zwecke.
Wie kann ich das machen?
bash
regular-expression
string
Yulong Ao
quelle
quelle
Antworten:
Bash kann reguläre Ausdrücke mit dem
=~
Operator abgleichen in[[ ... ]]
:quelle
[[ 'Example 123' =~ '([0-9]+)' ]]
ist falsch,[[ 'Example 123' =~ ([0-9]+) ]]
funktioniert aber wie beabsichtigt.[[ '1_2_3' =~ ([0-9]) ]] && echo ${BASH_REMATCH[@]}
nur Übereinstimmungen1
.Mit awk:
quelle
Wenn dies von einem Programm / Skript ausgegeben wird, das Sie geschrieben haben, und der Text formelhaft ist (dh genau diesem Muster folgt), können Sie ihn einfach verwenden
cut
.quelle
Wenn die Zeile immer genau diese Struktur hat,
read
können Sie dies in einer einzelnen Zeile ohne externe Prozesse tun:(auch mit einem Herestring ). Dadurch werden alle Wörter, die Sie nicht interessieren
x
(zu ignorieren), und die gewünschten Werte in den jeweiligen Variablen gespeichert.quelle