在将keystorePass值从一个server.xml移动到另一个server.xml时,我尝试了多种方法。我对sed不是很在行,但我尝试过多种方法,包括使用模式,我还使用grep将带有密钥存储密码的特定行移到空白文件中,并将行移到新的server.xml,但这也不起作用。每个人都可能已经知道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" />发布于 2014-07-29 18:37:57
我读到您的问题的方式是,您希望将"BadPassword“从server.xml1复制到server.xml2中的"GoodPassword”。如果是这样,那么使用以下简短的脚本:
#!/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 https://stackoverflow.com/questions/25021221
复制相似问题