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

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

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

printf("%f \n\n",row1.req_pnttime);

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

printf("row1.req_pnttime: %f \n\n",row1.req_pnttime);

有人能帮我做到这一点吗?

PS-每个打印语句的变量名长度都不同,所以我需要一种通用的方法来做到这一点。

答案1

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

解释

  • 一般格式是sed 's/find/replace/'。即找到一个表达式并替换它。
  • \(...\)这些是捕获组。因此,它们之间匹配的任何东西都会被“捕获”在变量中,并且可以在替换部分中调用,使用\1\2\3等。
  • 因此在这里,找到\(.*("\)\(.*,\)\(.*\))
    • 捕获组 1:.*("。从开头到以 结尾的任何内容进行捕获("
    • 捕获组 2:.*,。从 #1 开始,捕获直到,
    • 捕获组 3:.*。捕获最多(但不包括))
  • 然后用捕获组和附加格式替换\1\3: \2\3)

相关内容