使用正则表达式解析字符串
通常,使用正则表达式解析复杂结构并不是一个好主意。但这是可以完成的。例如,你可能希望将数据加载到 hive 表中,并且字段用逗号分隔,但像 array 这样的复杂类型用“|”分隔。文件包含所有以逗号分隔的字段的记录,复杂类型在方括号内。在这种情况下,这个一次性 Perl 可能就足够了:
echo "1,2,[3,4,5],5,6,[7,8],[1,2,34],5" | \
perl -ne \
'while( /\[[^,\]]+\,.*\]/ ){
if( /\[([^\]\|]+)\]/){
$text = $1;
$text_to_replace = $text;
$text =~ s/\,/\|/g;
s/$text_to_replace/$text/;
}
} print'
你想要检查输出:
1,2,[3 | 4 | 5],5,6-,[7 | 8],[1 | 2 | 34],5