我有一个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,主机名,用户,密码和域
答案 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