使用SED在等于匹配文件后移动值

时间:2014-07-29 17:14:48

标签: xml regex perl sed

在将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}}

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