如何使用sed更新特定节中的特定键?

如何使用sed更新特定节中的特定键?,sed,ini,ssh.net,Sed,Ini,Ssh.net,我有一个与以下类似的ini文件: [seciton1] key1 = 0 key2 = 0 [section2] key1 = 0 key2 = 0 我想将节“section2”的键1从0更新为1。对于相同的问题,准确的sed命令是什么 SSH.NET c#库中是否也支持sed命令?如果没有,那么使用ssh.net更新ini文件的方法是什么。这将在第2节之后更新key2一次: awk '/section2/ {f=1} /key2/ && f {$3=1;f=0} 1' fil

我有一个与以下类似的ini文件:

[seciton1]
key1 = 0
key2 = 0
[section2]
key1 = 0
key2 = 0
我想将节“section2”的键1从0更新为1。对于相同的问题,准确的sed命令是什么


SSH.NET c#库中是否也支持sed命令?如果没有,那么使用ssh.net更新ini文件的方法是什么。

这将在
第2节之后更新
key2
一次:

awk '/section2/ {f=1} /key2/ && f {$3=1;f=0} 1' file
[seciton1]
key1 = 0
key2 = 0
[section2]
key1 = 0
key2 = 1
要将其写回原始文件,请执行以下操作:

awk '/section2/ {f=1} /key2/ && f {$3=1;f=0} 1' file > tmp && mv tmp file
这可能适用于您(GNU-sed):

复制节标题并将其附加到每一行。如果当前节标题为
section2
则用
1
替换
key1
的值


注意:替换命令中的
m
标志仅将
*
限制为第一行的剩余部分(模式空间中现在的两行,即当前行和附加的节头)。

正则表达式不适合此任务,因为它们易于销毁文件。你应该使用一个合适的ini文件解析器来操作数据。到目前为止你都尝试了哪些正则表达式?为什么/如何不工作?C#library只负责连接到主机。该主机是否安装了
sed
,并不取决于您如何通过SSH连接到它。但是,如果它是类似Unix的远程系统,它将具有
sed
sed -i '/^\[/h;G;/section2/s/\(key1 = \).*/\11/m;P;d' file