我需要在特定的块中编辑参数值。你能帮忙解决这个问题吗?我知道使用perl脚本执行此操作,但我只需要一个命令
我的文件看起来像这样
Block 1
Param1=val1
Param2=val2
.
.
Block 2
Param1=val1
Param2=val2
.
.
Block 3
.
.
.
答案 0 :(得分:1)
您可以使用sed的地址:/pattern1/,/pattern2/
来处理一个“块”。例如,如果您只想更改Param1
中的Block 1
:
sed -r '/^Block 1/,/^Block 2/s/(\s*Param1=).*/\1NEW/' file
如果您有多个区块,则可以使用^Block 1$
或^Block 1\s*$
。这不会搞砸,例如:Block 120
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -ri '/^Block/h;G;s/(Param1=)\S+(.*\nBlock 2)$/\1newval\2/;P;d' file
将当前块存储在保留空间中,并将块变量附加到文件的每一行。如果参数和块变量匹配,则替换新参数值。打印每一行并删除块变量。
N.B。上面的解决方案取代了方框2中的参数1,根据您的需要定制解决方案。