テキストファイルの1行に部分文字列を挿入する方法

テキストファイルの1行に部分文字列を挿入する方法

私は多くのC ++ファイルを持っていますが、その中には次のような行があります。

CONST1( var1, var2, var3, var4 );

CONST1私が知っている定数ですが、var1tovar4は変数でありnullです""。次のように、すべての行に部分文字列を自動的に挿入したいと思います。

CONST1( var1, var2, var3, NEWSUBSTRING, var4 );

C++なので、空白がある場合とない場合があります。

sedawkまたはgrepその他のツールを使用する準備が整いました。 sedとregexpを使ってみましたが、方法が見つかりませんでした。私に教えてくれるアドバイスはありますか?

答え1

カンマ区切り文字に基づく簡単なソリューション - 常に4つの変数:

gv@debian:$ a="CONST1( var1, var2, var3, var4 );";echo $a |awk -F',' '{print $1","$2","$3"," " substring" ","$4}'

CONST1( var1, var2, var3, substring, var4 );

変数を含める:

gv@debian:$ a="CONST1( var1, var2, var3, var4 );";b="somestring";echo $a |awk -v x=$b -F',' '{print $1","$2","$3", "x","$4}'

CONST1( var1, var2, var3, somestring, var4 );

答え2

私はこれがawkでなされることができると思います:

awk -f edit_my_c.awk data_file

源泉edit_my_c.awk:

BEGIN {FS=","}

/CONST1\(.*,.*,.*,.*\);/ {
    printf("%s, %s, %s, NEWSUBSTRING, %s\n", $1, $2, $3, $4);
    next;
}

{print}

コマンドラインからCONST1とNEWSUBを渡すには:

awk -f ./edit_my_c2.awk -v to_match=CONST1 to_insert=NEWSUB data_file

源泉edit_my_c2.awk:

BEGIN {
    FS=",";
    my_match=to_match "\\(.*,.*,.*,.*\\);";
}

$0 ~ my_match {
    printf("%s, %s, %s, %s, %s\n", $1, $2, $3, to_insert, $4);
    next;
}

{print}

関連情報