gim*_*ilk 7 regex perl awk match
我确定这很容易,所以道歉.在Perl中我可能会做类似的事情
my $str = "foo=23";
$str ~= m/foo=([0-9]+)/
print "foo value is " . $1
Run Code Online (Sandbox Code Playgroud)
即在正则表达式中使用括号以便稍后可以将比赛的一部分称为$ 1,$ 2等.在awk中等效的是什么?
在GNU awk中,它是:
$ 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
Run Code Online (Sandbox Code Playgroud)
在其他awk中你需要使用[g] sub()和/或match()和/或substr(),这取决于你做/不想匹配的其他内容.例如:
$ 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
Run Code Online (Sandbox Code Playgroud)
如果目标模式不在一行的末尾,则在substr()调用上需要第三个',RLENGTH-length("foo =")'arg.如果你愿意,可以将"foo ="变成一个变量,如果它本身可以包含RE,那么还需要一些步骤.
同样对于GNU awk,使用该match()函数并将括号组捕获到数组中。
str = "foo=23"
match(str, /foo=([0-9]+)/, ary)
print "foo value is " ary[1]
Run Code Online (Sandbox Code Playgroud)