특정 부분 문자열을 교체하고 문자열로 변환하는 명령

특정 부분 문자열을 교체하고 문자열로 변환하는 명령

저는 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

관련 정보