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}文件