sed は、各パターンマッチング後の最初の項目を置き換えます。

sed は、各パターンマッチング後の最初の項目を置き換えます。

私のファイルには次の行があります。

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つがあるので、gsedを入力するとすべて置き換えられ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}')

おすすめ記事