命令替换特定子字符串并将其转换为字符串

命令替换特定子字符串并将其转换为字符串

我正在 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

相关内容