Как вставить подстроку в строку в текстовом файле

У меня много файлов C ++, в которых есть такие строки:

CONST1 (var1, var2, var3, var4);

CONST1 - это константа, которая Я знаю, но var1 to var4 являются переменными и могут быть пустыми "" . Я хотел бы автоматически вставить подстроку во все эти строки следующим образом:

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

Пробелы могут присутствовать или отсутствовать, так как это C ++.

Я готов использовать sed , awk , grep или другие инструменты. Я пробовал использовать sed с регулярным выражением, но не смог найти способ. У тебя есть какой-нибудь трюк?

0
19.01.2017, 00:00
2 ответа

Простое решение, основанное на разделителе запятой - всегда 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 );
0
28.01.2020, 04:48

Я думаю, что это можно сделать с помощью 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}
0
28.01.2020, 04:48

Теги

Похожие вопросы