Lac*_*bus 4 regex bash awk gawk
需要一个函数来转义包含 awk 脚本中的正则表达式运算符的字符串。
我遇到了这个“丑陋”的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
有什么更好的想法吗?
您可以使用像这样gsub的字符类来使用 single :
function escape_string( str ) {
gsub(/[\\.^$(){}\[\]|*+?]/, "\\\\&", str)
}
Run Code Online (Sandbox Code Playgroud)
&是对匹配字符串的反向引用,\\\\用于转义匹配。