如何使用sed命令替换ini文件中的值?

4
这个例子来自devstack脚本。
sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" "$file"

有人能解释一下这个 sed 替换命令是如何工作的吗?

我了解一些基本的 sed 机制,但这对我来说似乎很复杂。


但是分组和/或替换不正确吗?key=oldValue将被替换为key=oldValueNewValue - mefiX
1个回答

2

-i选项可以直接编辑$file文件。

地址范围

匹配行的范围语法是/pattern1/,/pattern2/。 脚本从第一行以$section开头的字符开始搜索范围(注意使用插入符号),到^[.*]表示包含至少一个字符的行。

替换

对于所有与上述范围指示符匹配的行,执行替换命令s/pattern/replacement/。 请注意使用|来分隔替换命令-s|pattern|replacement|。

要匹配的模式使用插入符号(^)从行的开头开始。

在替换部分中,段落(....)被称为\1。

在(...)部分中,字符串$section后面可能跟着若干个空格或制表符-[ \t]*代表零个或多个制表符或空格。然后是'='字符,可能还有更多的空格或制表符。最后的.*$将匹配到行末的任意数量的字符。

替换\1$value是包含在(...)中的部分,如前所述,后面跟着$value的值。

希望对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接