“ sed”在一个重复的段落中转换一个参数

时间:2019-06-19 18:33:54

标签: linux awk sed

我必须解析一个包含多个信息的文件。例如:

... some configs
CONFIGURATION = {
    "MASTER": "VALUE",
    "WORKER": "VALUE"
}

CONFIGURATION_RECENT = {
    "MASTER": "VALUE",
    "WORKER": "VALUE"
}
... some others configs

我希望能够独立更新CONFIGURATION中的WORKER值和CONFIGURATION_RECENT中的WORKER值。

我们唯一可以依赖的值是“ CONFIGURATION”和“ CONFIGURATION”,并且WORKER和MASTER ..键的值可以更改。

您认为可以使用sed命令对其进行更新吗?也许是awk。我目前在Ubuntu下工作。

非常感谢您的帮助 托马斯

1 个答案:

答案 0 :(得分:1)

使用bash和GNU sed:

section_start="^CONFIGURATION ="
section_end="^}"
key="WORKER"
new_value="foobar42"

sed -r "/${section_start}/,/${section_end}/{s/(\"${key}\": \").*(\")/\1${new_value}\2/}" file

输出:

... some configs
CONFIGURATION = {
    "MASTER": "VALUE",
    "WORKER": "foobar42"
}

CONFIGURATION_RECENT = {
    "MASTER": "VALUE",
    "WORKER": "VALUE"
}
... some others configs

$new_value不应包含sed可以解释为命令的任何字符。


请参阅:The Stack Overflow Regular Expressions FAQman sed