Text 使用sed或awk追加重复文本?

Text 使用sed或awk追加重复文本?,text,sed,awk,transformation,Text,Sed,Awk,Transformation,我有以下配置文件: servers = ( { host = "localhost"; ... timeout = 5; }, { host = "127.0.0.1"; ... timeout = 0; }, { host = "example.com"; ... timeout = 99; } ); 我想在每个部分的末尾附加“index”设置,以便配置如下所示: servers = (

我有以下配置文件:

servers = (
  {
    host = "localhost";
    ...
    timeout = 5;
  },
  {
    host = "127.0.0.1";
    ...
    timeout = 0;
  },
  {
    host = "example.com";
    ...
    timeout = 99;
  }  
);
我想在每个部分的末尾附加“index”设置,以便配置如下所示:

servers = (
  {
    host = "localhost";
    ...
    timeout = 5;
    index = 1;
  },
  {
    host = "127.0.0.1";
    ...
    timeout = 0;
    index = 2;
  },
  {
    host = "example.com";
    ...
    timeout = 99;
    index = 3;
  }  
);

如何使用传统的Unix工具(如sed或awk)实现这一点?

这会在第一个单词为
超时的每行后面添加一行
索引=…

awk '1;$1=="timeout"{printf "    index = %d;\n", ++i}' file

这会在第一个单词为
timeout
的每行后面添加一行,该行的索引为…

awk '1;$1=="timeout"{printf "    index = %d;\n", ++i}' file

Thanx,这比我想象的要简单!我还尝试使用regex而不是equality,以使其更易于理解。这个正则表达式“$1~/^\stimeout\s*/”工作正常。但是这个正则表达式“$1~/^\stimeout\s*\=\s*\d+\s*;/”与字符串不匹配。你有什么想法吗?@VitalyP
$1
与第一个单词匹配。如果需要整行,应该使用
$0
,因此表达式可以是
$0~/^[\t]*timeout[\t]*=[\t]*[0-9]*[\t]*;[\t]*$
。默认情况下,Awk匹配整行,因此您可以像
Awk'1那样编写它/^[\t]*超时[\t]*=[\t]*[0-9]*[\t]*;[\t]*$/{printf“index=%d;\n”,++i}文件
Thanx,它比我预期的更简单!我还尝试使用regex而不是equality,以使其更易于理解。这个正则表达式“$1~/^\stimeout\s*/”工作正常。但是这个正则表达式“$1~/^\stimeout\s*\=\s*\d+\s*;/”与字符串不匹配。你有什么想法吗?@VitalyP
$1
与第一个单词匹配。如果需要整行,应该使用
$0
,因此表达式可以是
$0~/^[\t]*timeout[\t]*=[\t]*[0-9]*[\t]*;[\t]*$
。默认情况下,Awk匹配整行,因此您可以像
Awk'1那样编写它/^[\t]*超时[\t]*=[\t]*[0-9]*[\t]*;[\t]*$/{printf“index=%d;\n”,++i}文件