Trong GNU awk mà muốn được:
$ 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
Trong của awk khác mà bạn sẽ cần phải sử dụng [g] sub() và/hoặc kết hợp() và/hoặc substr() tùy thuộc vào những gì khác bạn làm/không muốn kết hợp. Ví dụ:
$ 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
Bạn sẽ cần một arg ba 'RLENGTH dài ('foo =')' trên substr() gọi nếu mô hình mục tiêu không phải là ở phần cuối của một đường thẳng. Đặt "foo =" một biến nếu bạn muốn và nếu nó có thể chứa RE thì cần thêm một vài bước nữa.
Nguồn
2012-10-21 16:04:11
Cảm ơn, tôi đã không nhận ra sed có thể thực hiện việc này. – gimmeamilk
Chỉ cần lưu ý rằng "+" là ký tự meta ERE và nhiều "sed" s theo mặc định chỉ hỗ trợ BRE. Đối với một giải pháp di động cho tất cả các seds bạn cần sử dụng [0-9] [0-9] * để thay thế. –