我正在 Linux 上工作,我的字符串如下:
SELECT concat_ws("|",max(date_column),substr(abc,1,9)) key
SELECT concat_ws("|",xyz_date_column,abc) key
我需要一个sed
命令来获取如下所示的输出,将动态日期列转换为字符串:我只需要转换 concat_ws 函数中的那些列。 concat_ws("|", 每个文件之后的所有内容都不同
SELECT concat_ws("|",(CAST (max(date_column) as string)),substr(abc,1,9)) key,
SELECT concat_ws("|",(CAST (xyz_date_column) as string),abc) key
我尝试了这个命令,但没有得到预期的输出:
sed -e 's/concat_ws(\([^\)]*\))/concat_ws(CAST(\1 as string))/g'
答案1
尝试:
sed -E 's/(concat_ws\("\|",[[:space:]]*)([^,]*),/\1(\2),/;
s/(concat_ws\("\|",[[:space:]]*)([^,]*),/\1(CAST (\2 as string)),/' infile
第一部分是周围数据列带有额外括号的部分;
第二部分添加到投掷。
输出:
SELECT concat_ws("|",(CAST ((max(date_column)) as string)),substr(abc,1,9)) key
SELECT concat_ws("|",(CAST ((xyz_date_column) as string)),abc) key