私のファイルには次の行があります。
select concat_ws('|',column1,'${hiveconf:RUNDATE}'), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,'${hiveconf:RUNDATE}')
'${hiveconf:RUNDATE}'
に交換する必要がありstring('${hiveconf:RUNDATE}')
ますが、存在する場合にのみ可能ですconcat_ws
。
concat_ws
したがって、同じ行に2つがあるので、g
sedを入力するとすべて置き換えられRUNDATE
、削除するとg
最初の項目だけが置き換えられます。
変更後、私の行は次のようになります。
select concat_ws('|',column1,string('${hiveconf:RUNDATE}')), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,string('${hiveconf:RUNDATE}'))
だから、これまで私が収集したさまざまなパターンは次のとおりです。concat_ws('|',column1,coalesce(to_date(timestamp),"") concat_ws('|',columnA,to_date(a.timestamp),'01.01.00.01.01') concat_ws('|',column1,max(to_date(timestamp)),substr(id,1,9)) concat_ws('|',column,timestamp_d,'01.03.02',column2).
必要タイムスタンプ文字列に変換された列。出力ファイルは次のとおりです。
concat_ws('|',column1,coalesce(string(to_date(timestamp)),"") concat_ws('|',columnA,string(to_date(a.timestamp)),'01.01.00.01.01') concat_ws('|',column1,string(max(to_date(timestamp))),substr(id,1,9)) concat_ws('|',column,string(timestamp_d),'01.03.02',column2).
答え1
入れ子にならない場合concat_ws(...)
、つまりそのような項目がまったくない場合は、concat_ws(... foo() ...)
2番目の括弧セットはありません。次に、aまでnonが続くすべての項目を一致させ、その項目のみをconcat_ws()
置き換えることができます。このように:concat_ws(
(
${hiveconf:RUNDATE}
$ sed "s/\(concat_ws([^)]*\)\('\${hiveconf:RUNDATE}\)/\1string(\2/g" file
select concat_ws('|',column1,string('${hiveconf:RUNDATE}'), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,string('${hiveconf:RUNDATE}')