如何将一行的一部分复制到另一个位置

Viv*_*V K 3 sed awk

我在这样的文件中有大约 100 个打印语句:

printf("%f \n\n",row1.req_pnttime);
Run Code Online (Sandbox Code Playgroud)

我想复制字符串内的变量名,使其变成这样

printf("row1.req_pnttime: %f \n\n",row1.req_pnttime);
Run Code Online (Sandbox Code Playgroud)

谁能帮我做到这一点?

PS-每个打印语句的变量名称长度都不同,因此我需要一种通用方法来执行此操作。

Spa*_*awk 8

sed 's/\(.*("\)\(.*,\)\(.*\))/\1\3: \2\3)/' /path/to/input.txt >/path/to/output.txt
Run Code Online (Sandbox Code Playgroud)

解释

  • 一般格式为sed 's/find/replace/'. 即找到一个表达式并替换它。
  • \(...\)这些是捕获组。因此,任何在它们之间的匹配是一个变量“捕获”,并可以在替换部分被召回,其中\1\2\3,等。
  • 所以在这里,找到\(.*("\)\(.*,\)\(.*\)).
    • 捕获组1: .*("。捕捉从开始到结束的任何东西("
    • 捕获组2: .*,。从 #1 开始,最多捕获,.
    • 捕获组3: .*。最多捕获(但不包括))
  • 然后替换为捕获组和其他格式\1\3: \2\3)