GNU awk że byłoby:
$ 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
Innymi awk trzeba by użyć [g] sub() i/lub match() i/lub substr() w zależności od tego, co w przeciwnym razie nie chcesz się dopasować. Na przykład:
$ 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
należałoby trzeciego argumentu o „RLENGTH długości («foo =»)” na substr() zadzwonić jeśli wzorzec docelowy nie znajduje się na końcu linii. Zmodyfikuj "foo =" jako zmienną, jeśli chcesz i jeśli sama może zawierać RE, musisz wykonać kilka dodatkowych kroków.
Dzięki, nie zdawałem sobie sprawy, że sed może to zrobić. – gimmeamilk
Pamiętaj, że "+" to meta-znak ERE, a wiele "sed" domyślnie obsługuje tylko BRE. Aby rozwiązanie było przenośne dla wszystkich sedów, musiałbyś zamiast tego użyć [0-9] [0-9] *. –