如何更新配置文件中的值

时间:2016-07-26 07:07:31

标签: linux shell

我有一个Config.yml文件,我想通过使用shell脚本来更新如下所示的值。

当前档案数据

服务器:
   - uri:http://localhost:5550/service/mgmt/current
   - displayName:server1
   - 用户名:用户
   - 密码:welcome zh    - 域名:
  ---默认
  --- domain1
   - useBulkApi:true

要求输出应如下所示: 服务器:
   - uri:https://hostname1:5550/service/mgmt/current
   - displayName:instance1
   - 用户名:xx
   - 密码:xx
   - 域名:
  ---默认
  --- domain1
   - useBulkApi:true

主机名,用户,密码和域名将针对每个URI进行更改。这些价值来自剧本。我必须更新至少3个服务器详细信息,每个服务器具有不同的URI,主机名,用户,密码和域

1 个答案:

答案 0 :(得分:0)

您已使用sed命令编辑文件。 假设有四个参数传递给你的脚本,

1. URI
2. Username
3. Password
4. Domains 

可以这样做:

sed -i 's/: http:\/\/localhost:5550\/service\/mgmt\/current$/$1/' Config.yml
sed -i 's/: user$/$2/' Config.yml
sed -i 's/: welcome$/$3/' Config.yml
sed -i 's/: domain1$/$4/' Config.yml

此外,您可以使用sed的-e选项在单个命令中编写此命令,而不是使用四个命令。

小建议:您可以执行以下操作,而不是为您的所有参数设置默认值

servers:
- uri: <URI>
- displayName: server1
- username: <USER>
- password: <PASSWORD>
- domains:
--- default
--- <DOMAIN>
- useBulkApi: true

使用这样的占位符将确保您替换正确的选项

上面的sed命令将被修改如下:

sed -i&#39; s $ 1 /&#39; Config.yml

有关sed的更多信息,请访问here

是的,你可以使用循环。您可以创建具有相同内容的2个文件,并动态更改文件名以编辑此文件。 或者,您可以简单地重定向sed命令的输出以创建新文件。下面是重定向两个文件的示例

sed 's/: http:\/\/localhost:5550\/service\/mgmt\/current$/$1/' -e  's/: user$/$2/' -e 's/: welcome$/$3/' -e 's/: domain1$/$4/' Config.yml > ServerDetail1.yml

sed 's/: http:\/\/localhost:5550\/service\/mgmt\/current$/$1/' -e  's/: user$/$2/' -e 's/: welcome$/$3/' -e 's/: domain1$/$4/' Config.yml > ServerDetail2.yml