我有一个简单的配置文件,看起来有点像这样:
[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
上尝试了一些变体,但据我所知,它似乎在单独的行上运行。
我如何做相同的
[SectionB]
)username = value2
)答案 0 :(得分: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
答案 1 :(得分:0)
这个多行的sed应该可以解决这个问题:
sed -E -n '1h;1!H;${;g;s/\[sectionB\]([^[]*)username = [a-zA-Z0-9_]+/\[sectionB\]\1username = valueX/g;p;}' input.txt