行からデータを抽出し、抽出されたデータを使用して新しい行を追加する方法は?

行からデータを抽出し、抽出されたデータを使用して新しい行を追加する方法は?

ソースコードがありますが、いくつかの特定の行を新しい書式とテキストに置き換えたいと思います。

ファイルには次の行が含まれています。

LogIfYouCan(!is_it_ready, "Log Text, some variable: " << variable1 << " variable2: " << variable2);

入れ替えたいです。

if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

つまり、 で始まる行は行末までテキストLogIfYouCanに変更され、カンマまでのテキストは中括弧とともに追加されます。LogOutputどうすればいいですか?そして、?,(,ifsedawk

答え1

使用sed

$ sed -E 's/[^!]*([^,]*),[^"]*(.*)/if(\1) {\n   LogOutput(\2\n}/' input_file
if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

答え2

-E\nGNU sedやBSD sedなど、EREと改行の有効化をサポートするsedを使用してください。

$ sed -E 's/^LogIfYouCan\(([^,]+), *(.*)/if(\1) {\n   LogOutput(\2\n}/' file
if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

関連情報