特定の部分文字列を置き換えて文字列に変換するコマンド

特定の部分文字列を置き換えて文字列に変換するコマンド

私は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

おすすめ記事