如何将正则表达式传递给 AWK 中的函数

eri*_*icj 3 awk

我不知道如何将正则表达式作为参数传递给函数。

如果我传递一个字符串,就可以了,

我有以下 awk 文件,

#!/usr/bin/awk -f

function find(name){
    for(i=0;i<NF;i++)if($(i+1)~name)print $(i+1)
}

{
    find("mysql")
}    
Run Code Online (Sandbox Code Playgroud)

我做类似的事情

$ ./fct.awk <(echo "$str")
Run Code Online (Sandbox Code Playgroud)

这工作正常。

但是当我调用 awk 文件时,

{
    find(/mysql/)
}  
Run Code Online (Sandbox Code Playgroud)

这不起作用。

我究竟做错了什么?

谢谢,

埃里克·J。

Ken*_*ent 5

您不能(不应该)将正则表达式常量传递给用户定义的函数。在这种情况下,您必须使用动态正则表达式。喜欢find("mysql")

如果你这样做find(/mysql/),awk 做的是:find($0~/mysql/)所以它传递一个01到你的find(..)函数。

有关详细信息,请参阅此问题。

awk 变量赋值语句需要解释

还有 http://www.gnu.org/software/gawk/manual/gawk.html#Using-Constant-Regexps

部分:6.1.2 使用正则表达式常量