3

我有一个简单的配置文件,看起来有点像这样:

[sectionA]
url = value1
username = value2
password = value3

[sectionC]
url = value1
username = value2
password = value3

[sectionB]
url = value1
username = value2
password = value3

我想将 SectionB 的用户名替换为valueX不接触 SectionA 或 SectionC 的用户名。

我已经尝试了一些变体sed,但据我所知,它似乎在单独的行上运行。

我该怎么做

  1. 搜索 StringA(在这种情况下[SectionB]
  2. 查找下一个出现的 StringB ( username = value2)
  3. 替换为 StringC ('username = valueX`)
4

2 回答 2

4

sed

sed '/sectionB/,/\[/s/username.*/username = valueX/' input

awk

awk -vRS='' -vFS='\n' -vOFS='\n' '
$1~/sectionB/{
    sub(/=.*$/, "= valueX", $3)
}
{
    printf "%s\n\n", $0
}' input
于 2012-08-15T23:26:44.733 回答
0

这个多行 sed 应该可以解决问题:

sed -E -n '1h;1!H;${;g;s/\[sectionB\]([^[]*)username = [a-zA-Z0-9_]+/\[sectionB\]\1username = valueX/g;p;}' input.txt
于 2012-08-15T23:28:13.253 回答