在将keystorePass值从一个server.xml
移动到另一个sed
时,我尝试了多种方法。我对server.xml
不是很了解,但尝试过多种方法,包括使用模式,我还使用grep将带有密钥库密码的特定行转移到空白文件中,然后将行移动到新的server.xml
但是这也没用。每个人都可能已经知道keystoreFile="/etc/blank"
keystorePass="BLAH" sslProtocol = "TLS" />
通常包含的内容,但这里是我需要修复的部分的示例。
**
server.xml
**
现在,当我们提供构建时,我们拥有自己的keystorePass=
集,它只适用于我们的服务器,但当我们的用户部署它时,他们使用不同的keystorePass。我只是将文件移回到构建完成后移回的位置但我们有时需要对文件进行一些编辑,因此必须对其进行替换。
总而言之,我需要在server.xml1
server.xml2
之后使用密码替换server.xml1 (Test)
keystoreFile="/etc/blank/"
keystorePass="BadPassword" sslProtocol = "TLS" />
server.xml2 (Customer)
keystoreFile="/etc/blank/"
keystorePass="GoodPassword" sslProtocol = "TLS" />
{{1}}
答案 0 :(得分:0)
我阅读你的问题的方式是你要复制" BadPassword"从server.xml1
到" GoodPassword"在server.xml2
。如果是这样,那么使用这个简短的脚本:
#!/bin/bash
password=`grep keystorePass= old.xml | awk -F\" '{print $2'}`
cat old.xml | sed 's/@PASSWORD@/$password/' > server.xml.bak
mv server.xml.bak server.xml
这会将[keystorePass="
]与以下["
]之间的字符串从server.xml1
写入server.xml2
。
注意:这假定密码可以是除引号([^"]
)之外的任何字符。此外,保存脚本后,请确保运行chmod +x script_name.sh
,然后使用./script_name.sh
运行脚本。
我会创建一个文件虚拟文件来测试脚本,然后再尝试它。如果我误解了你的问题,请告诉我。
您也可以尝试下面的简短版本
警告:根据您的bash
#!/binbash
passwd=$(sed -nr 's/keystorePass="([^"]*).*/\1/p' server.xml1)
sed -i.xml -r "s/(keystorePass=\")[^\"]*(.*)/\1"$passwd"\2/" server.xml2