sed命令用于搜索多个字符串并替换其中一个字符串

时间:2015-11-06 09:27:19

标签: sed

我需要在特定的块中编辑参数值。你能帮忙解决这个问题吗?我知道使用perl脚本执行此操作,但我只需要一个命令

我的文件看起来像这样

Block 1
   Param1=val1
   Param2=val2
   .
   .

Block 2
   Param1=val1
   Param2=val2
   .
   .

Block 3
.
.
.

2 个答案:

答案 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,根据您的需要定制解决方案。