awk:从字符串中转义正则表达式运算符的函数

awk: function to escape regex operators from a string

需要一个函数来转义包含 awk 脚本中正则表达式运算符的字符串。

我遇到了这个 'ugly' 解决方案:

function escape_string( str )
{
    gsub( /\/, "\\",  str );
    gsub( /\./, "\.", str );
    gsub( /\^/, "\^", str );
    gsub( /$/, "\$", str );
    gsub( /\*/, "\*", str );
    gsub( /\+/, "\+", str );
    gsub( /\?/, "\?", str );
    gsub( /\(/, "\(", str );
    gsub( /\)/, "\)", str );
    gsub( /\[/, "\[", str );
    gsub( /\]/, "\]", str );
    gsub( /\{/, "\{", str );
    gsub( /\}/, "\}", str );
    gsub( /\|/, "\|", str );

    return str;
}

有更好的主意吗?

您可以使用 个字符 class 来使用单个 gsub,如下所示:

function escape_string( str ) {
   gsub(/[\.^$(){}\[\]|*+?]/, "\\&", str)
}

& 是对匹配字符串的反向引用,\\ 用于转义匹配。