In GNU awk das wäre:
$ cat tst.awk
BEGIN {
str = "foo=23"
val = gensub(/foo=([0-9]+)/,"\\1","",str)
print "foo value is " val
}
$
$ gawk -f tst.awk
foo value is 23
In anderen awk die Sie würden verwenden müssen [g] sub() und/oder Spiel() und/oder substr(), je nachdem, was sonst willst/willst du nicht aufpassen. Zum Beispiel:
$ cat tst.awk
BEGIN {
str = "foo=23"
val = substr(str,match(str,/foo=[0-9]+/)+length("foo="))
print "foo value is " val
}
$ awk -f tst.awk
foo value is 23
Sie würden eine dritte arg von benötigen ‚RLENGTH-Länge (‚foo =‘)‘ auf der substr() aufrufen, wenn das Zielmuster nicht am Ende einer Zeile ist. Machen Sie "foo =" eine Variable, wenn Sie möchten, und wenn sie selbst eine RE enthalten kann, sind noch ein paar Schritte notwendig.
Danke, ich wusste nicht, sed könnte dies tun. – gimmeamilk
Bitte beachten Sie, dass "+" ein ERE Meta-Zeichen ist, und viele "sed" s standardmäßig nur BREs unterstützen. Für eine Lösung, die zu allen sds portierbar ist, müssten Sie stattdessen [0-9] [0-9] * verwenden. –