使用sed批量修改跨多行的配置文件

背景

我们经常需要对一些配置文件进行修改,这些配置文件的内容依不同项目而变,但大体结构不变,所以可以批量修改。

例如下图这个C结构体的字段,需要将其值从256改成512,该字段是个数组,占了2行,且出现在多个.h文件,手工修改工作量非常大,必须用脚本来做。

使用sed批量修改跨多行的配置文件_第1张图片

我通常使用findsed命令来做,不过网上对sed的介绍都比较浅,很少讲解如何匹配一个完整段落(即起始行终止行均为模式串)的情况,其实这种需求sed是完全可以满足的。

思路

首先通过find命令过滤出所有的.h格式的配置文件,然后通过sed命令的-i选项就地执行修改操作。

如果我们只提供了一个模式串,则sed只匹配一行,能修改的也就只有一行,这不符合我们的需求,因此sed的行匹配语句必须精心构造。

我们必须匹配多行,但是匹配多行也有很多选择,我选择下一个字段来提供边界,这样的好处是不管目标字段是多少维数组,都能精确匹配

最终脚本

find sensor/ -name '*.h' | xargs sed -i '/nWienerFactor/,/nNlmFactor/{s/256/512/g}'

这个脚本一次性修改了24个.h文件中的48个字段,非常高效!

总结

使用sed的精髓就在模式串的选择。

你可能感兴趣的:(linux软件,sed)