텍스트 파일의 한 줄에 하위 문자열을 삽입하는 방법

텍스트 파일의 한 줄에 하위 문자열을 삽입하는 방법

나는 많은 C++ 파일을 가지고 있는데 그 중 일부에는 다음과 같은 줄이 있습니다.

CONST1( var1, var2, var3, var4 );

CONST1내가 아는 상수이지만 var1to var4는 변수이고 null 일 수 있습니다 "". 다음과 같이 모든 행에 하위 문자열을 자동으로 삽입하고 싶습니다.

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

C++이므로 공백이 있을 수도 있고 없을 수도 있습니다.

sed, awk또는 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}

관련 정보