仅使用sed命令替换文件中检索到的行号的第一个出现

时间:2017-12-10 08:53:41

标签: shell sed

从下面的aws配置文件中,我想仅在默认部分替换aws区域:

[proj1]
output = json
region = aws_region

[default]
output = json
region = us-east-1

[proj2]
output = json
region = us-east-1

[proj2-frankfurt]
output = json
region = eu-central-1

从这个命令,我到达检索[默认]部分的行号位置:

  

grep -n“default”〜/ .aws / config | awk -F“:”'{print $ 1}'

结果是:5(如预期的那样)

所以,从这个输出(行号),我想用sed替换(仅)第一次出现而不是用“eu-central-1”取代“aws_region”,例如做类似的事情:

  

sed -i' 7 ,/ aws_region / s // eu-central-1 /'〜/ .aws / config

其中 7 是我上一个命令的输出

如何在一次操作中完成此操作?

1 个答案:

答案 0 :(得分:2)

使用GNU sed:

sed '/^\[default\]/,/^$/{ s/region = .*/region = foobar/ }' file

输出到标准输出:

[proj1]
output = json
region = aws_region

[default]
output = json
region = foobar

[proj2]
output = json
region = us-east-1

[proj2-frankfurt]
output = json
region = eu-central-1

如果您要“就地”修改文件,请使用sed的选项-i

请参阅:man sedThe Stack Overflow Regular Expressions FAQ